Как избежать длинных конструкторов для простых групп некоторых значений?

Я хочу сгруппировать некоторые значения, например в 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, На самом деле я хочу сгруппировать пять ценностей. Использование вложенных пар для этого кажется немного глупым.

Есть конструктор для установки всех членов или что-то подобное? Какие альтернативы у меня есть, чтобы просто сгруппировать некоторые значения без написания конструктора для них?

1

Решение

Прежде всего, вы могли бы использовать 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};
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]