我想对一些值进行分组,例如在 struct
中,并在创建对象时轻松设置它们。
struct structure
{
char letter;
int number;
float decimal;
};
structure object('c', 42, 12.3); // this doesn't work
我知道我可以手动编写这样的构造函数。
struct structure
{
structure(char letter, int number, float decimal) : letter(letter), number(number), decimal(decimal) {}
char letter;
int number;
float decimal;
};
structure object('c', 42, 12.3); // this of course do work
但是这样做很烦人,因为您必须两次和三次提及每个成员。但我只想对一些值进行分组...
如果我只有五个值中的三个,我会使用 std::pair
并嵌套它们。
typedef structure pair<char, pair<number, decimal>>;
structure object(make_pair('c', make_pair(42, 12.3)));
但是对于更多的值,使用 .first
和 .second
获取正确的值真的很困惑。实际上,我想对五个值进行分组。为此使用嵌套对似乎有点老套。
是否有用于设置所有成员或类似内容的构造函数?我有什么选择可以简单地对一些值进行分组而不为它们编写构造函数?
最佳答案
首先,您可以使用 std::tuple
,它基本上是不同类型的值的集合:
std::tuple<char, int, float> object('c', 42, 12.3f);
您可以使用 std::get
访问元素.例如,要访问 char
,你会使用 std::get<0>(object)
.
其次,如果您使用该结构,您可以使用聚合初始化来初始化它:
structure object = {'c', 42, 12.3f};
// or even
structure object{'c', 42, 12.3f};
关于c++ - 如何避免某些值的简单组的长构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15585513/