从理论上讲,是否可以允许多个C ++模板具有相同的名称?

时间:2013-05-18 23:52:19

标签: c++

这就像函数重载一样。例如。可以这样做:

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 {
};

为避免混淆,是否不存在此功能?或者有什么理由这实际上没有意义吗?

2 个答案:

答案 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
};