标题不代表我的问题,但我找不到正确的问题,请随时编辑。
语境 :
学校的炸弹人项目。
在我的Bomberman
我有一个execAfter()
函数原型如下:
void execAfter(std::function<void(t_params *)> func, t_params *params, int ms);
此函数的目的是在延迟后执行func
,以params
struct 作为参数。ms
示例:投下炸弹,X 毫秒后爆炸。
它完美地工作(使用 lambda,如在先前的 SO 问题中所述)。
问题
现在我想对我的函数进行模板化,以便能够传递不同的函数类型和不同的params
类型。
时间.hh
template<typename T, typename U, typename V>
void execAfter(T func, U params, V ms);
时间.cpp
template<typename T, typename U, typename V>
void Time::execAfter(T func, U params, V ms)
{
...
}
(模板化V
参数没用,只是编译问题,后面我会想办法)
示例:*调用函数void X(Y)
,作为参数传递Y*
。
从我的角度来看,我以正确的方式完成了一切,一切都编译了,除非在链接 gcc 抛出这个之后:
[...]
linkage ...
[...]
src/Entities/Character.o: In function `Character::landBomb()':
/home/teube_a/Code/tech2/c++/bomberman-2016- couille_c/zizi_g/src/Entities/Character.cpp:208: undefined reference to `void Time::execAfter<std::function<void (s_params*)>, s_params*, int>(std::function<void (s_params*)>, s_params*, int)'
collect2: ld returned 1 exit status
make: *** [bomberman] Error 1
我真的不明白,请解释一下这个模板化函数无法生成的可能原因。
如果您需要更多信息,请告诉我。