4

重複の可能性:
関数の存在を確認するためのC ++テンプレートを作成することは可能ですか?

これは私の以前の質問と非常に似ています。テンプレート引数にメンバー関数が含まれているかどうかを確認したい。

私は前の質問で受け入れられた答えと同様のこのコードを試しました。

struct A
{
   int member_func();
};

struct B
{
};

template<typename T>
struct has_member_func
{
   template<typename C> static char func(???); //what should I put in place of '???'
   template<typename C> static int func(...);

   enum{val = sizeof(func<T>(0)) == 1};
};

int main()
{
    std::cout<< has_member_func<B>::val; //should output 0
    std::cout<< has_member_func<A>::val; //should output 1
}

しかし、それを機能させるために何を代わりに置くべきかわかりません???。SFINAEの概念は初めてです。

4

1 に答える 1

1

関数の存在をチェックするために C ++テンプレートを作成することは可能ですか? :

template<typename T>
class has_member_func
{
        typedef char no;
        typedef char yes[2];
        template<class C> static yes& test(char (*)[sizeof(&C::member_func)]);
        template<class C> static no& test(...);
public:
        enum{value = sizeof(test<T>(0)) == sizeof(yes&)};
};
于 2010-12-04T16:25:32.257 に答える