Set*_*gie 21 c++ templates overloading
是否可以拥有相同类的多个版本,这些版本仅在模板参数的数量上有所不同?
例如:
template<typename T>
class Blah {
public:
void operator()(T);
};
template<typename T, typename T2>
class Blah {
public:
void operator()(T, T2);
};
Run Code Online (Sandbox Code Playgroud)
我正在尝试模拟仿函数类型的东西,它可以采用可变数量的参数(最多可写出不同模板的数量).
Fle*_*exo 25
最简单的答案是只有一个模板,您想要支持的最大数量,并在除第一个类型之外的所有类型上使用void作为默认类型.然后,您可以根据需要使用部分特化:
template<typename T1, typename T2=void>
struct foo {
void operator()(T1, T2);
};
template <typename T1>
struct foo<T1, void> {
void operator()(T1);
};
int main() {
foo<int> test1;
foo<int,int> test2;
test1(0);
test2(1,1);
}
Run Code Online (Sandbox Code Playgroud)
Ker*_* SB 15
模板只能有一个基本定义.如果你需要一个可变数量的参数,并且你不想像@awoodland建议那样使用"null type"结构,如果你有一个C++ 0x编译器,那么你可以使用可变参数模板:
template <typename ...Dummy> struct foo; // base case, never instantiated!
template <typename T> struct foo<T> { /*...*/ }; // partial spec. for one parameter
template <typename T, typename U> struct foo<T, U> { /*...*/ }; // ditto for two
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14666 次 |
| 最近记录: |