如何基于operator()参数推广类?

时间:2015-07-20 11:42:57

标签: c++ templates stl

我有一个类应该将一些参数转发给仿函数,但是做一些其他的东西。

class SemaphoredEventRouterObserver {
   My_Semaphore m_semaphore;
   mywrapper_Function<void (*)(const Event &)> callback;
   SemaphoredEventRouterObserver(My_Semaphore semaphore, mywrapper_Function<void (*)(const Event &)> o_callback) : m_semaphore(semaphore) {
      callback = o_callback;
   }
   void operator()(const Event & event) {
      callback(event);
      semaphone.post();
   }
}    

问题是我可能需要创建这样的几十个类,因为对于其他仿函数,参数有所不同,因此我可以接收const Event & eventstring arg而不是接收int cMyclass abc或其他任何内容。

是否可以为此创建模板类?我只是使用stl而且我不能使用boost,尽管我很想看到与boost相关的答案。

1 个答案:

答案 0 :(得分:1)

使用可变参数模板,您可以执行以下操作:

typename <typename... Ts>
class SemaphoredRouterObserver {
   My_Semaphore m_semaphore;
   mywrapper_Function<void (*)(Ts...)> callback;
public:
   SemaphoredEventRouterObserver(My_Semaphore semaphore,
                                 mywrapper_Function<void (*)(Ts...)> o_callback)
     : m_semaphore(semaphore),
       callback(o_callback)
   {}
   void operator()(Ts... args) {
      callback(args...);
      semaphone.post();
   }
};

然后

using SemaphoredEventRouterObserver = SemaphoredRouterObserver<const Event&>;