C++03で、特定のメンバ関数が存在するかを判定する

Boost.TTIのhas_member_function機能を使って、特定のメンバ関数を持っているかを判定する。

C++11のSFINAE Expressionを使えない環境向け。

#include <boost/tti/has_member_function.hpp>

struct X {
    int foo(double, char);
};

namespace my_namespace {
    // foo()メンバ関数を持っているか判定するためのメタ関数を定義する
    BOOST_TTI_HAS_MEMBER_FUNCTION(foo)
}

int main()
{
    static_assert(
        my_namespace::has_member_function_foo<
            X,                               // 対象の型
            int,                             // 戻り値の型
            boost::mpl::vector<double, char> // パラメータの型
         >::value == true,
        "must be true");
}

参照