Можно ли обнаружить указатель на функцию-член? - PullRequest
1 голос
/ 04 января 2009

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

1 Ответ

6 голосов
/ 04 января 2009

Существует способ, но он включает в себя повторение специализации для каждого количества аргументов и модификаторов 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";
        // ...
    }
}

Хватайте это с здесь .

...