テンプレートを次のように宣言するとします。
template <class functor, int index>
class MyClass
{
public:
MyClass(){someFunction(index);}
private:
void someFunction(int index)
{
while(index--)
functor();
}
int commonFunction(void)
{
return M_PI;
}
};
commonFunction メソッドはテンプレート パラメータに依存しないことに注意してください。
クライアントは次のテンプレートを使用します。
MyClass<func1,100> t1;
MyClass<func2,100> t2;
// ...
MyClass<funci,100> ti;
// where i, for example in 1 .. 1000
テンプレートをインスタンス化すると、バイナリ コードで commonFunction が重複することになりますか?
コンパイラはその重複を防ぐことができますか?
C++ 標準は、重複を防止できると定義しているので、すべてのコンパイラが最適化を提供する必要がありますか?
もちろん、これは、次のように、基本クラスのすべてのテンプレートに共通の機能を実装し、テンプレート化されたクラスの違いを移動することで簡単に解決できます。
class baseMyClass
{
int commonFunction(void)
{
return M_PI;
}
};
template <class functor, int index>
class MyClass : private baseMyClass
{
public:
MyClass(){someFunction(index);}
private:
void someFunction(int index)
{
while(index--)
functor();
}
};
しかし、私の質問の目的は、次のことを確認することです
。標準化は、私が与えた最適化のように見える場合に実行する必要があると定義しているので、単純にテンプレートを使用してコンパイラに依存することができますか?