Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > определение наличия метода


Автор: MAKCim 15.3.2006, 09:29
хотелось бы узнать, как можно реализовать (и можно ли вообще) обобщенное определение наличия метода, например в виде
Цитата

if (CHECKMETHOD(bool (A::*)(int), operator()))

т. е первый параметр - тип указателя на метод, второй название метода
вся проблема в указании имени метода, если его жестко прописать в коде то все легко
было бы здорово указывать его динамически как показано выше
думал насчет макросов (что-то не очень)

у кого какие варианты?

ps. задача сугубо теоретическая

Автор: np9mi7 15.3.2006, 10:16
http://rsdn.ru/Forum/?mid=1481451

Автор: MAKCim 15.3.2006, 17:33
Цитата

http://rsdn.ru/Forum/?mid=1481451

наверно, вы не так поняли вопрос
как определить наличие метода если у него известно имя и оно жестко прописано в коде я знаю
возможно ли его задавать как-нибудь динамически?

Автор: chipset 15.3.2006, 17:40
Юзай SFINAE (Гугл) и построенный на этом принципе enable/disable _if из Boost. Там принцип в том что если шаблонный параметр функции неверен (нету метода) и существует другая шаблонная функция которая готова принять аргумент то ошибки не возникает.

Автор: MAKCim 15.3.2006, 18:26
пример определения
Код

template<class _Ret, class _Class>
    class check_method
{
private:
    typedef char true_type;
    typedef struct {true_type array[2];} false_type;

    template<class _Tp, _Tp __object> struct checker {};
    template<class _Classes> static true_type check
        (checker<_Ret (_Classes::*)(),&_Classes::F>*);
    template<class _Classes> static false_type check(...);
public:
    enum {__value=sizeof(check<_Class>(0))==sizeof(true_type)};
};

здесь мы жестко привязаны к имени функции/метода/оператора F
можно ли сделать чтобы имя задавалось динамически

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)