インテル固有の計算が利用可能な場合、私はテンプレート関数を専門としています。私の場合、SSEとAVXです。特殊化されていないテンプレート関数と特殊化されたテンプレート関数を比較してパフォーマンスを比較するテストプログラムを作成したいと思います。ただし、特殊化されている型の非特殊化テンプレート関数を呼び出す方法がわかりません。
簡単な例を次に示します。
#include <iostream>
template <typename T>
void f(T val)
{
std::cout << "Template function. Value: " << val << std::endl;
}
template <>
void f(float val)
{
std::cout << "Float function. Value: " << val << std::endl;
}
int main()
{
f(1);
f(1.0f);
return 0;
}
質問:f(1.0f)
関数名を変更せずに、特殊化されていないテンプレート関数で呼び出す方法はありますか?
明確化:私の場合、2つの関数は、ヘッダーと実装ファイルの同じペアの一部としてライブラリで提供されます。次に、これは(テンプレートの場合)プログラムに含まれ、(特殊化の場合)リンクされます。
特殊化を禁止するパラメータを追加できます。
#include <iostream>
template <typename T, bool enable_specialization = true>
void f(T val)
{
std::cout << "Template function. Value: " << val << std::endl;
}
template <>
void f<float, true>(float val)
{
std::cout << "Float function. Value: " << val << std::endl;
}
int main()
{
f(1.0f);
f<float, false>(1.0f);
return 0;
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加