Я хочу сгруппировать некоторые значения, например в 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};
Других решений пока нет …