Информация об изменениях

Сообщение Re: Инициализация массива класса через шаблон от 01.09.2015 8:04

Изменено 01.09.2015 8:10 watchmaker

Здравствуйте, koenjihyakkei, Вы писали:

K>Можно ли через variadic tamplates (или как-то еще) инициализировать массив в классе?

K>Например, как-нибудь так:
K>
K>template<fnCheck ... A>
K>class Foo
K>{
K>public:
K>    Foo() : array(A...) {} // error
K>private:
K>    fnCheck array[sizeof...(A)];
K>};

K>


Во-первых, достаточно вместо array(A...) написать array{A...}.
Во-вторых, тебе точно нужен в каждом экземпляре Foo<...> с одинаковыми шаблонными параметрами свой уникальный массив? Он у тебя меняется? Почему он вообще не сделан статическим constexpr членом класса? Незачем ведь что-то инициализировать в конструкторе, если у всех Foo<c1, c2, c3> должен иметься один и тот же массив с содержимым {c1, c2, c3}, вместо этого можно иметь один массив, инициализированный ещё на этапе компиляции.
Re: Инициализация массива класса через шаблон
Здравствуйте, koenjihyakkei, Вы писали:

K>Можно ли через variadic tamplates (или как-то еще) инициализировать массив в классе?

K>Например, как-нибудь так:
K>
K>template<fnCheck ... A>
K>class Foo
K>{
K>public:
K>    Foo() : array(A...) {} // error
K>private:
K>    fnCheck array[sizeof...(A)];
K>};

K>


Во-первых, достаточно вместо array(A...) написать array{A...}.
Во-вторых, тебе точно нужен в каждом экземпляре Foo<...> с одинаковыми шаблонными параметрами свой уникальный массив? Он у тебя меняется? Почему он вообще не сделан статическим constexpr членом класса? Незачем ведь что-то инициализировать в конструкторе, если у всех Foo<c1, c2, c3> должен иметься один и тот же массив с содержимым {c1, c2, c3}, вместо этого можно иметь один массив, инициализированный ещё на этапе компиляции.
В-третьих, зачем вообще массив?
    bool check() {
        for (auto&& checker : {A...})
            if (!checker())
                return false;
       return true;
    }