理论上,是否允许多个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的优秀推荐人!我知道这是不可能的。我的问题是为什么不呢?这个功能没有意义吗?或者它只是没有被指定出来?根据你和队长提出的另一个问题,这似乎只是一个从未被指定的问题。无论如何,谢谢你的回答!