Я хочу принять до нескольких параметров (этот номер определяется в параметре шаблона) в конструкторе класса шаблона. Я не могу использовать initializer_list
, так как я не могу утверждать его размер во время компиляции, насколько мне известно.
Что я пробовал
Моя первая попытка заключалась в использовании std:: array в качестве параметра:
template<size_t s>
class foo {
int v[s];
public:
foo(std::array<int, s>) {/*...*/}
};
Однако это заставляет меня инициализировать это (даже если конструктор не explicit
):
foo<4> a{{1,2,3,4}} // Two brackets.
Я бы подумал, что может быть какая-то магия шаблона (variadic templates?), но я не могу даже определить правильный синтаксис для использования в конструкторе. Я не могу вызывать конструктор рекурсивно... могу ли я?
Я попытался найти определение конструктора для std::array
(поскольку он не позволяет больше параметров, чем размер массива, именно то, что я хочу), но все, что я мог найти, это то, что у него есть неявные конструкторы, Это конструкторы по умолчанию? Если да, то как
std::array<int, 3> a = {1,2,3}
работа?
Дополнительный бонус: почему стандарт не определил альтернативу с фиксированным размером std::initializer_list
? Что-то вроде std::static_initializer_list<T, N>
. Существуют ли какие-либо планы по поддержке такого рода функций в будущем? Это даже необходимо?