【发布时间】:2017-02-14 00:08:18
【问题描述】:
我正在尝试编写一个侦听器/回调类,但我在调用方法中get Declaration type contains unexpanded parameter pack 'Args'。
我想称呼为:
listeners.call (&ListenerType::myCallbackMethod, arg1, arg2, etc);
好的,我可以创建许多不同数量的参数的调用方法,但如果我可以只做一个方法更好
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);
}
};
有什么建议吗? 谢谢!
【问题讨论】:
-
都在错误信息中。你在哪里有一个名为
Args的未扩展参数包的声明?展开它。 -
试图重新格式化以避免水平滚动条,但更改了参数的名称 - 这使正确答案无效。我已经回滚了。
-
顺便说一句,您的设计是一个非常糟糕的主意。转发引用不能这样工作。