Boost MPL: Call a (member) function only if it exists

У меня есть класс A, который имеет параметр шаблона T. Есть случаи использования, когда класс T предлагает функцию func1(), и есть случаи использования, когда T ее не предлагает. Функция f() в A должна вызывать func1(), если она существует. Я думаю, это должно быть возможно с помощью boost mpl, но я не знаю как. Вот псевдокод:

template<class T>
class A
{
    void f(T param)
    {
        if(T::func1 is an existing function)
            param.func1();
    }
};

Еще лучше было бы сделать else-case:

template<class T>
class A
{
    void f(T param)
    {
        if(T::func1 is an existing function)
            param.func1();
        else
            cout << "func1 doesn't exist" << endl;
    }
};
5
задан Nicol Bolas 7 October 2011 в 12:13
поделиться