当英特尔内在计算可用时,我专门用于模板功能.在我的情况下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;
}
Run Code Online (Sandbox Code Playgroud)
问题:有没有办法f(1.0f)使用非专业模板函数调用而不更改函数名称?
澄清:在我的例子中,这两个函数作为同一对头文件和实现文件的一部分在库中提供.然后包含(用于模板)和链接(用于专业化)程序.
您可以添加额外参数以禁止专业化:
#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;
}
Run Code Online (Sandbox Code Playgroud)