1

我想对一些值进行分组,例如在 astruct中,并在创建对象时轻松设置它们。

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但是对于更多的值,使用and获取正确的值变得非常混乱.second。实际上,我想对五个值进行分组。为此使用嵌套对似乎有点 hacky。

是否有用于设置所有成员或类似内容的构造函数?我有什么替代方法可以简单地对一些值进行分组而不为它们编写构造函数?

4

1 回答 1

3

首先,您可以使用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};
于 2013-03-23T10:16:35.447 回答