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

StackOverflow https://stackoverflow.com/questions/411004

  •  03-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

Есть способ, но он включает в себя повторение своей специализации для каждого количества аргументов и константных/изменчивых модификаторов для этих функций-членов.Более простой способ сделать это — использовать 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";
        // ...
    }
}

Возьмите это из здесь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top