我正在尝试编写一个监听器/回调类,但我在调用方法中获取声明类型包含未扩展的参数包“Args”
。
我想这样称呼:
listeners.call (&ListenerType::myCallbackMethod、arg1、arg2 等);
好吧,我可以创建许多具有不同数量参数的调用方法,但如果我可以只做一种方法更好
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);
}
};
有什么建议吗? 谢谢!
最佳答案
我认为问题出在这里:
template <typename ...Args>
void call (void (ListenerClass::*callbackFunction) /*here->*/(Args), Args && ...value)
这应该是:
template <typename ...Args>
void call (void (ListenerClass::*callbackFunction) (Args...), Args && ...value)
您指定传递的函数指针采用 Args
类型的参数,这是一个参数包。所以你只需要使用 ...
关于c++ - 声明类型包含未扩展的参数包 'Args',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42208382/