タイトルは私の質問を代表するものではありませんが、正しいものが見つかりませんでした。自由に編集してください。
環境 :
学校向けボンバーマンプロジェクト。
私Bomberman
には、次のexecAfter()
ようにプロトタイプ化された関数があります。
void execAfter(std::function<void(t_params *)> func, t_params *params, int ms);
この関数の目的は、遅延後に struct をパラメーターとしてfunc
取り、を実行することです。params
ms
例:爆弾を投下し、X ミリ秒後に爆発します。
それは完全に機能します(以前の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
よくわかりません。このテンプレート化された関数を生成できない理由を教えてください。
さらに情報が必要な場合は教えてください。