Я могу создать класс шаблона, который хранит некоторые значения в свойстве и позвольте мне позже вызвать метод, вызывающий функцию с этим аргументом. Например:variadic template class, чтобы сделать отложенный вызов функции вариационного шаблона
template <typename U> void g(U u) { cout << u << endl; }
template <typename U> class C {
public:
U u;
C(U u) { this->u = u; }
void m() { g(u); }
};
int main() {
C<double> c(5.5);
c.m();
}
Но как сделать то же самое с вариативными шаблонами? Я хотел бы написать что-то вроде:
template <typename ... T> void f(T... a) { cout << "generik" << endl; }
template <typename ... T> class B {
public:
T... arg;
B(T... arg) {
this->arg = arg;
}
void m() { f(arg); }
};
int main() {
B<int,double> b(1,1.1);
b.m();
}
Я знаю, что это не будет работать, потому что мы не можем объявить член распакованного типа параметра.
Я могу выполнить сопоставление шаблонов для некоторых параметров списка, а затем вызвать функцию, если задано заданное число параметров, но я хочу сделать это в общем виде. Есть ли элегантный способ сделать это?
Использование 'станд :: tuple' –
Ваш первый пример не в состоянии совершенствовать вперед, а также. Вы собираетесь называться 'm' более одного раза? Может быть, только перегрузка '&&' должна быть идеальной вперед ... – Yakk
Это было не главное, но спасибо. –