我有一个类应该将一些参数转发给仿函数,但是做一些其他的东西。
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 & event
,string arg
而不是接收int c
, Myclass abc
或其他任何内容。
是否可以为此创建模板类?我只是使用stl而且我不能使用boost,尽管我很想看到与boost相关的答案。
答案 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&>;