1

SFINAE 原則/enable_if を使用して、クラス テンプレート メソッドの部分的な特殊化を「偽造」できるのではないかと思います。たとえば、 のFoo2 つのバージョンFoo::barが定義されているクラス テンプレートがあるとします。たとえば、一方を有効にしてもう一方を無効にしたい場合T2 = intや、その逆の場合。

template<typename T1, typename T2>
struct Foo
{
    void bar();
};

// Enable if T2 != int (disable otherwise)
template<typename T1, typename T2>
void Foo<T1,T2>::bar()
{
}

// Enable if T2 == int (disable otherwise)
template<typename T1, typename T2>
void Foo<T1,T2>::bar()
{
}

PS: enable_if を優先してください。ありがとう。

4

1 に答える 1

5

[編集済み]ブール値を入力すると、さまざまなオーバーロードを生成できます。

#include <type_traits>

template <typename T1, typename T2>
struct Foo
{
    void bar_impl(std::true_type);
    void bar_impl(std::false_type);

    void bar() { bar_impl(std::is_same<T2, int>()); }
};
于 2012-04-23T12:04:29.273 に答える