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

理论上,是否允许多个C++模板具有相同的名称?,c++,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 { }; 但这样做还不行: void foo(int i) { ; } // F

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

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 {
};
但这样做还不行:

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

此功能的存在是否只是为了避免混淆?或者有什么原因,这实际上没有意义吗?< /P> < P>不,C++中不可能做到这一点。 首先查找模板,然后查找使其无法知道哪个模板是哪个模板的参数

它看起来确实像是这个的复制品:

不可能像您编写的那样,但使用部分专门化很容易做到:

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

@CaptainObvlious的优秀推荐人!我知道这是不可能的。我的问题是为什么不呢?这个功能没有意义吗?或者它只是没有被指定出来?根据你和队长提出的另一个问题,这似乎只是一个从未被指定的问题。无论如何,谢谢你的回答!