0

私のクラスには、std::vector<MyType> my_list5 つの要素を持つメンバーが必要です。s は、MyTypeデフォルトのコンストラクターで初期化する必要があります。このクラスの明示的なコンストラクターを作成する必要がありますか、またはそれなしで解決できますか?

4

2 に答える 2

2

C++11 では、次のようにして、暗黙的に生成されたコンストラクターによって適切に初期化されたベクターを取得できます。

class foo {
    std::vector<int> my_list { 1, 2, 3, 4, 5 };
};

C++11 がなければ、自分で書く必要があります:

template <typename T, std::size_t N>
T* begin(T(&arr)[N]) { return &arr[0]; }

template <typename T, std::size_t N>
T* end(T(&arr)[N]) { return &arr[0] + N; }

class foo {
    // imitate initializer list
    static const int default_list[] = { 1, 2, 3, 4, 5 };
    std::vector<int> my_list;
public:
    foo() : my_list(begin(default_list), end(default_list)) {}
};
于 2012-06-13T17:00:25.307 に答える
1

自分で書く必要があります。コンパイラによって生成されたコンストラクターは、デフォルトで initializemy_listになります。つまり、空になります。次のようなものが必要です。

class MyClass {
    std::vector<MyType> my_list;

    MyClass() : my_list(5) {}
};
于 2012-06-13T17:00:05.180 に答える