c++ - 如何避免某些值的简单组的长构造函数?

标签 c++ constructor struct grouping shortcut

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

相关文章:

C++ std::shared_ptr 会初始化类中的其他成员数据

C++ 结构初始化数组

c - 初始化结构体中的数组

c++ - 如何在不使用 ((CMainFrame*) AfxGetMainWnd ())->... 的情况下访问 Mainfrm 成员变量状态?

Java 等同于 C++ 加密

java - 更改 Eclipse 中的构造函数模板,以便它调用 setter

c - 在 C 中通过引用传递动态长度的二维结构数组

c++ - Docker compose libstdc++.so.6 GLIBCXX_3.4.21 未找到

c++ - 我想打印单词的缩写,但不知道我做错了什么

c++ - 不存在合适的构造函数来从 "const char[7]"转换为 "TopicA"