我想对一些值进行分组,例如在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
但是这样做很烦人,因为您必须两次提及每个成员,三次提及。但我只想对一些值(value)观进行分组...
我只有五个值中的三个会使用
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/