質問
さて、
これが私がやろうとしていることです...今はコンパイルしていますが、リンクに失敗しています... LNK2001
メンバー変数がないため、静的メソッドが必要ですが、それらが提供する高速化のためにインラインにすることも必要です。
これを行う最良の方法は何ですか?簡単に説明すると次のとおりです。
/* foo.h */
class foo
{
static void bar(float* in);
};
/* foo.cpp */
inline void foo::bar(float* in)
{
// some dark magic here
}
行きたいのでこれをやろうとしている:
foo::bar(myFloatPtr);
fooにはメンバー変数がありません...意味がありません。
解決
foo.cpp以外の別のcppファイルからbarを呼び出す場合は、ヘッダーファイルにある必要があります。
他のヒント
まず、" class"
にはロジックがないため、代わりに namespace
に配置します。次に、ヘッダーファイルで関数の本体を直接定義して、コンパイラがそれらを参照できるようにします。それ以外の場合は、これらの関数をインライン化するために、リンカーによってプログラム全体の最適化
を実行する必要があります(AFAIK)。
インライン関数は、個別の実装ファイルではなく、ヘッダーファイルで定義する必要があります。ヘッダーファイルが#includeされている場合、インライン化が望まれる場合は、定義が必要です。結局、
リンクエラーは、ヘッダーファイル内の宣言がメソッドがインラインであることをコンパイラに通知しないのに対し、実装はインラインであるためリンクに使用できないためです。
一般的にインライン化可能な関数は、宣言された場所(ヘッダーファイル内)で実装されます。コンパイラーは関数を自由にインライン化できますが、インライン化を強制することはできません 。 Visual C ++を使用している場合は、「適切なインライン化」、「リンク時コード生成」を有効にします。および「お気に入りの高速コード」。