Сообщение Re: Инициализация массива класса через шаблон от 01.09.2015 8:04
Изменено 01.09.2015 8:10 watchmaker
Здравствуйте, koenjihyakkei, Вы писали:
K>Можно ли через variadic tamplates (или как-то еще) инициализировать массив в классе?
K>Например, как-нибудь так:
K>
Во-первых, достаточно вместо array(A...) написать array{A...}.
Во-вторых, тебе точно нужен в каждом экземпляре Foo<...> с одинаковыми шаблонными параметрами свой уникальный массив? Он у тебя меняется? Почему он вообще не сделан статическим constexpr членом класса? Незачем ведь что-то инициализировать в конструкторе, если у всех Foo<c1, c2, c3> должен иметься один и тот же массив с содержимым {c1, c2, c3}, вместо этого можно иметь один массив, инициализированный ещё на этапе компиляции.
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>
Во-первых, достаточно вместо array(A...) написать array{A...}.
Во-вторых, тебе точно нужен в каждом экземпляре Foo<...> с одинаковыми шаблонными параметрами свой уникальный массив? Он у тебя меняется? Почему он вообще не сделан статическим constexpr членом класса? Незачем ведь что-то инициализировать в конструкторе, если у всех Foo<c1, c2, c3> должен иметься один и тот же массив с содержимым {c1, c2, c3}, вместо этого можно иметь один массив, инициализированный ещё на этапе компиляции.
В-третьих, зачем вообще массив?
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;
}