功能指针数组(包括成员功能)投掷模板专业化错误
Array of function pointers ( including member functions) throwing template specialization error
所以,我有一个称为委托的类,可以存储一系列函数指针。这是代码:
template<typename Func>
class delegate
{
private:
public:
typename std::vector<Func> mListOfFunctions;
void Bind(Func f)
{
mListOfFunctions.push_back(f);
}
template<typename...TArgs>
void Invoke(TArgs&&...arg)
{
for (auto f : mListOfFunctions)
{
f(std::forward<TArgs>(arg)...);
}
}
};
player.cpp中的用法:
delegate<void(float)> testDelegate;
testDelegate.Bind(std::bind(&Player::MoveLeft,this));
这引发了错误C2893(错误C2893无法专业化函数模板'未知型std :: Invoke(_callable&amp;&amp;&amp;&amp;,_ types&amp;&amp;&amp; ...)'...)')')
>但是,当我更改绑定到以下内容的定义时:
template<typename F>
void Bind(F f)
{
}
它可以正常工作,但是当我尝试将函数对象推入向量时,它再次抛出相同的错误。
无论如何是否可以解决这个问题?
我需要缓存指针传递的指针。
std::bind
的结果不是函数指针(它是未指定类型的函数对象),而是试图将其分为一个。由于您使用的是std::forward
,因此必须使用C 11,这意味着您可以使用std::function
:
template<typename Func>
class delegate
{
private:
public:
typename std::vector<std::function<Func>> mListOfFunctions;
void Bind(std::function<Func> f)
{
mListOfFunctions.push_back(f);
}
template<typename...TArgs>
void Invoke(TArgs&&...arg)
{
for (auto f : mListOfFunctions)
{
f(std::forward<TArgs>(arg)...);
}
}
};
相关文章:
- Malloc后的自由功能错误
- 功能错误中的表达语法帮助!C/C
- 将对象传递到类,没有接收匹配功能错误
- 无效打印功能错误
- 绑定std ::功能错误
- 我可以启用有关我自己的变异功能错误使用的指定符的警告
- 功能错误的使用无效
- C 朋友模板功能错误
- 单链接列表推送功能错误
- ConstexPR静态模板功能:G 错误是Clang上的警告
- 一个奇怪的打印功能错误
- 信号功能错误
- 查找最低值.功能.错误:线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x7fff5fc89000)
- 超载功能错误消息
- 与操作员'<<'不匹配 有人可以帮助解决无效功能错误吗?[C++]
- 没有操作员发现升压read_xml功能错误
- 工厂设计模式中的纯虚拟功能错误
- 如何跟踪LLVM验证功能错误"Expected no forward declarations!"?
- OOP项目功能错误
- c++ GTK控制台日志功能错误