这就像函数重载一样。例如。可以这样做:
void foo(int i) {
;
}
// Function overload ftw.
void foo(int i, int j) {
;
}
但这样做还不行(
)template<typename T>
class Foo {
};
// Fail!
template<typename T1, typename T2>
class Foo {
};
为避免混淆,是否不存在此功能?或者有什么理由这实际上没有意义吗?
答案 0 :(得分:1)
不能在c ++中做到这一点。
首先查找模板,然后查询使得无法知道哪个模板是哪个参数。
这似乎与此重复: Why is it not possible to overload class templates?
答案 1 :(得分:1)
你编写的方式不可能,但部分专业化很容易:
template <typename...> struct Foo; // don't even define
template <typename T>
struct Foo<T>
{
// ... "one-argument" version
};
template <typename T1, typename T2>
struct Foo<T1, T2>
{
// ... "two-arguments" version
};