pair
看起来像这样:
std::vector<std::pair<uint64 /*id*/, std::string /*message*/>
如果我想要 3 个变量vector
?我可以使用配对还是什么?
C++有时我发现定义琐碎的全公共纯数据类非常有用,例如
struct Event {
int id = 0;
std::string msg = "";
double time = 0.;
};
当然有点打字,但 IMO 比必须使用 e.second
或 std::get<1>(e)
而不是在代码中随处e.msg
要好得多。
写作一次,阅读多次。以增加阅读/理解时间为代价来节省写作时间是一个非常糟糕的主意。
这种方法的缺点是你无法访问元程序中结构的第n个成员,但是由于许多其他原因C++元编程无论如何都非常弱,所以如果你真的需要有非平凡的元代码,我建议你移出C++并使用用体面的语言编写的外部C++代码生成器,而不是模板技巧和黑客。
理解正确,您可以使用在标题<tuple>
中声明的std::tuple
。例如
std::vector<std::tuple<uint64, std::string, SomeOtherType>> v;
如果你不想要 C++11,你可以使用
std::pair<uint64, std::pair<std::string, SomeOtherType> >
但这就像试图将三个值放在一对中一样错误。为什么我认为这是错误的?一对表示两个值。如果你把三个或任何其他数量的值放在一对中,你就在做这样的事情。