можно ли обнаружить указатель на функцию-член?

мне нужен специализированный шаблон в случае указателя на функцию-член. Есть ли способ обнаружить это? прямо сейчас я объявляю struct isPtrToMemberFunc, затем добавляю дополнительный шаблон (класс TType=void) к каждому классу (сейчас только 1) и специализирую дополнительный шаблон, чтобы увидеть, isPtrToMemberFunc. Есть ли способ определить это автоматически? если нет, то мой текущий метод - лучшее решение?


person Community    schedule 04.01.2009    source источник


Ответы (1)


Есть способ, но он включает в себя повторение вашей специализации для каждого количества аргументов и модификаторов const/volatile для этих функций-членов. Более простой способ сделать это — использовать boost.functiontypes, который сделает это за вас:

template<typename T>
void doit(T t) {
    if(boost::function_types::is_member_function_pointer<T>::value) {
        std::cout << "it is";
        // ...
    } else {
        std::cout << "it is not";
        // ...
    }
}

Загрузите его с здесь.

person Johannes Schaub - litb    schedule 04.01.2009