-1

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

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

难道这个功能不存在只是为了避免混淆?还是有某种原因这实际上没有意义?

4

2 回答 2

1

不,在 C++ 中不可能做到这一点。

首先查找模板,然后查找使无法知道哪个模板是哪个模板的参数。

它似乎与这个重复: 为什么不能重载类模板?

于 2013-05-19T00:00:04.020 回答
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
};
于 2013-05-19T00:01:01.593 回答