Укажите метод класса в параметре шаблона - опционально (параметр по умолчанию) - PullRequest
0 голосов
/ 26 декабря 2011

Я хочу сделать что-то вроде этого:

template <class T,class t_function = t::default_function>
class foo
{
   public:
   static void bar(T t)
   {
      t.t_function();
   }
};

class example1
{
   public:
       void default_function()
       {
           std::cout<<"test"<<std::endl;
       }
};

class example2
{
   public:
      void someotherfunction()
      {
         std::cout<<"test2"<<std::endl;
      }
};

//how to use it

foo<example1>::bar(example1()); //should work, since example1 has the default function

foo<example2,example2::someotherfunction>::bar(example2()); //should work too

Словом: я бы хотел, чтобы пользователь этой функции мог предоставить альтернативный метод для выполнения вместо метода по умолчанию.

Можно ли добиться этого в C ++ и если да, то как?

1 Ответ

1 голос
/ 26 декабря 2011

Может быть, что-то вроде этого:

template <class T, void(T::*TFun)() = &T::default_function>
struct Foo
{
    static void bar(T t)
    {
        (t.*TFun)();
    }
};

Использование:

struct Zoo { void default_function() { } };
struct Zar { void bla() { } };

int main()
{
    Zoo z1;
    Zar z2;
    Foo<Zoo>::bar(z1);
    Foo<Zar, &Zar::bla>::bar(z2);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...