我正在试图编写一个监听器/回调类,但我在调用方法中get Declaration type contains unexpanded parameter pack 'Args'
。
我想打电话给:
listeners.call (&ListenerType::myCallbackMethod, arg1, arg2, etc);
好的,我可以使用不同数量的args创建许多调用方法,但是如果我能做到只有一种方法更好
template <typename ...Args>
void call (void (ListenerClass::*callbackFunction) (Args), Args && ...value) // Compiler error: Declaration type contains unexpanded parameter pack 'Args'
{
auto iter = listeners.begin();
while (iter != listeners.end())
{
if(auto p = iter->lock())
{
(p->*callbackFunction) (std::forward<Args>(value)...);
++iter;
}
else
iter = listeners.erase(iter);
}
};
有什么建议吗? 谢谢!
答案 0 :(得分:4)
我认为问题出在这里:
template <typename ...Args>
void call (void (ListenerClass::*callbackFunction) /*here->*/(Args), Args && ...value)
这应该是:
template <typename ...Args>
void call (void (ListenerClass::*callbackFunction) (Args...), Args && ...value)
您指定要传递的函数指针采用类型为Args
的参数作为参数包。因此,您只需使用...