1

たとえば、いくつかの値をグループ化し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

しかし、そうすることは、各メンバーに2回と3回言及する必要があるため、面倒です。しかし、私はいくつかの値をグループ化したいだけです...

私が利用しstd::pairてこれらをネストする5つの値のうち3つだけがありますか?

typedef structure pair<char, pair<number, decimal>>;

structure object(make_pair('c', make_pair(42, 12.3)));

.firstしかし、さらにいくつかの値については、とを使用して正しい値をフェッチすることは非常に混乱します.second。実際には、5つの値をグループ化したいです。そのためにネストされたペアを使用するのは少しハッキーなようです。

すべてのメンバーまたは同様のものを設定するためのコンストラクターはありますか?コンストラクターを記述せずに、いくつかの値を単純にグループ化するには、どのような選択肢が必要ですか?

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 に答える