Пытаясь выучить Variadic templates
и понятия не имею, почему это не скомпилируется, ошибка: no matching constructor for initialization of 'test<>'
.
Пока мы занимаемся этим, я хотел бы задать второй вопрос, уточнив мои комментарии внутри кода.
template <typename ...Args> // this is just how Variadic template are defined
class test {
public:
int arr[sizeof...(Args)]; // this is packing or unpacking? why are
// dots outside of bracket?
test(Args... arg) // this is called packing?
: arr{arg...}{} // this is called un-packing?
};
int main(){
test<> t(1,2,3);
return 0;
}
Редактировать: кажется, что мне нужно сделать test <int, int, int>
, но почему я должен это делать, так как этот другой пример работает так:
template <typename ...Args>
int func(Args... arg)
{
int a[] = {arg...};
return sizeof...(arg);
}
int main(void)
{
std::cout << func(1,2,3,4,5,6) << std::endl;
return 0;
}
fun c не нужна <int, int ,int..
часть.