如何避免为某些值的简单组使用长构造函数

How to avoid long constructors for simple groups of some values?

本文关键字:构造函数 简单 何避免      更新时间:2023-10-16

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