-1

関数のオーバーロードのようなものです。たとえば、次のようにしても問題ありません。

void foo(int i) {
  ;
}

// Function overload ftw.
void foo(int i, int j) {
  ;
}

しかし、これを行うのは (まだ) OK ではありません:

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 に答える