在 C++11 中使用元组有哪些好的用例?例如,我有一个定义局部结构的函数,如下所示:
template<typename T, typename CmpF, typename LessF>
void mwquicksort(T *pT, int nitem, const int M, CmpF cmp, LessF less)
{
struct SI
{
int l, r, w;
SI() {}
SI(int _l, int _r, int _w) : l(_l), r(_r), w(_w) {}
} stack[40];
// etc
我正在考虑用 struct 替换SI
struct std::tuple<int,int,int>
,这是一个更短的声明,带有已经预定义的方便的构造函数和运算符,但有以下缺点:
- 元组元素隐藏在模糊的、实现定义的结构中。即使 Visual Studio 很好地解释和显示了它们的内容,我仍然不能放置依赖于元组元素值的条件断点。
- 访问单个元组字段 (
get<0>(some_tuple)
) 比访问结构元素 (s.l
) 详细得多。 - 按名称访问字段比按数字索引提供更多信息(而且更短!)。
最后两点在某种程度上由tie
函数解决。考虑到这些缺点,什么是元组的好用例?
更新结果是 VS2010 SP1 调试器无法显示以下数组的内容std::tuple<int, int, int> stack[40]
,但是当它使用结构编码时它可以正常工作。所以这个决定基本上是不费吹灰之力的:如果你必须检查它的值,使用 struct [esp. 对于像 GDB 这样的调试器很重要]。