声明类型包含未展开的参数包'Args'
Declaration type contains unexpanded parameter pack 'Args'
我正在尝试编写侦听器/回调类,但我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);
}
};
有什么建议吗?谢谢!
我相信问题就在这里:
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++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用默认参数等选择模板专业化
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 如何修复带有 clang 的参数'args'缺少默认参数的问题?
- 折叠表达式和参数包:static_assert 内 Args&& 和 Args 之间的区别
- 在C++中,如何将参数添加到"Args&&... args"参数列表中?
- 作为参数的'char *args[]'和'char **argv'之间的差异
- 我希望通过使用模板元编程从变量ARGS中进行剥离参数
- 声明类型包含未展开的参数包'Args'
- 如何将带有 args 的成员函数作为参数传递给另一个成员函数
- 使用Args.中的n个参数..从位置m开始
- 警告:格式 [-Wformat-extra-args] 的参数太多
- 混合类型,可变长度参数列表(varargin,*args,..)用于C++
- *v8::String::Utf8Value(args[0]->ToString()) 不返回 node 的字符串.js addon 参数
- 可变参数模板转换为 std::function<R(ARGS...)>适用于 GCC 而不是 MSVC2013,为什么?
- 在c++中的fn调用中,args被复制到相应的参数中.这是初始化还是赋值
- 可变参数函数:表达式包含未展开的参数包'args'