C++ 完美回调函数

C++ 完美回调函数,c++,templates,c++11,function-pointers,perfect-forwarding,C++,Templates,C++11,Function Pointers,Perfect Forwarding,目标:获取一个回调函数,该函数将接受任何类型的参数作为回调函数的参数 .h template <typename F, typename A> void DelayedCallback(F&& CallbackFunction, A&& Args = NULL); / 我做错了什么?我对C++中的大多数概念都很陌生,更多的是C程序员 编辑:这不仅仅是关于错误,我很确定这不是我唯一犯的错误。您的错误消息与DelayedCallback的签名不匹配 te

目标:获取一个回调函数,该函数将接受任何类型的参数作为回调函数的参数

.h
template <typename F, typename A>
void DelayedCallback(F&& CallbackFunction, A&& Args = NULL);
/

我做错了什么?我对C++中的大多数概念都很陌生,更多的是C程序员
编辑:这不仅仅是关于错误,我很确定这不是我唯一犯的错误。

您的错误消息与
DelayedCallback的签名不匹配

template <typename F, typename A>
void DelayedCallback(F&& CallbackFunction, A&& Args = NULL)

DelayedCallback(&HUDExit);


一旦你解决了所有这些问题,你就会遇到评论中提到的问题。您可以像处理非模板一样,在头文件和源文件之间声明和定义函数模板。因此,在标题本身中实现
DelayedCallback
,就像我上面所做的那样。

1。不要在单独的翻译单元中实现模板功能。2.不要错过
模板
前缀及其实现。因此,所有内容都应该在.h中。什么是不要错过模板前缀及其实现?“什么是不要错过模板前缀…”
template void DelayedCallback(F&&CallbackFunction,A&&Args){/*…*/}
我指的是定义。@πάνταῥεῖ 不知何故,我怀疑无法推断“A”的模板参数是由OP将实现放在cpp文件中引起的。很抱歉,我剪切了两个多余的参数,这些参数对于以下问题毫无价值:有没有不使用头文件的解决方案?我在虚幻SDK(3)中,我不确定这种类型的使用有什么限制?@Fawar没有,一般来说没有任何有用的替代方法。在头文件、虚幻SDK或其他文件中实现函数模板时,您不太可能遇到问题。我将尝试一下,看看是否有什么收获,非常感谢您的帮助!如果你写的东西碰巧帮了我的忙,我会接受你的回答,并将我围绕这个问题得出的结果发布出来
DelayedCallback(&HUDExit);

void HUDExit() {}
ERROR : DelayedCallback(FName,float,F &&,A &&)' : could not deduce template argument for 'A'
template <typename F, typename A>
void DelayedCallback(F&& CallbackFunction, A&& Args = NULL)

DelayedCallback(&HUDExit);
template <typename F, typename... A>
void DelayedCallback(F&& CallbackFunction, A&&... Args)
{
  //Timer function that received a function pointer to be the "callback"  function
  Timer((std::bind(std::forward<F>(CallbackFunction), std::forward<A>(Args)...))())
  // previous line is missing a semicolon at the very least
}