我想对一些值进行分组,例如在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/

10-11 00:02