我有一个类应该将一些参数转发给仿函数,但还做了一些额外的事情。
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 相关的答案。
最佳答案
使用可变参数模板,你可以这样做:
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&>;
关于c++ - 如何根据 operator() 参数泛化一个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31515614/