【发布时间】:2014-12-03 20:05:09
【问题描述】:
我可以创建一个模板类,在属性中存储一些值,然后让我稍后调用一个方法,该方法使用这个参数调用一个函数。像这样:
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();
}
我知道这行不通,因为我们不能声明解压参数类型的成员。
我可以对列表的某些参数进行模式匹配,然后在给定数量的参数时调用该函数,但我想以通用方式进行。有什么优雅的方法吗?
【问题讨论】:
-
您的第一个示例也未能完善。您是否打算多次调用
m?也许只有&&重载应该完美向前... -
这不是重点,但谢谢。
标签: c++ templates c++11 variadic