我一直在寻找一个明确的答案,而我只是在网上发现一些零碎的东西。
我有一个功能,它需要根据类型变量采取不同的行动。该函数不带参数,因此重载不起作用,导致模板特化。 E.g:
//Calls to this function would work like this:
int a = f();
int b = f<int>();
int c = f<char>();
//...
首先,即使语法上可行吗?我觉得它是。仍在进行中。
我在定义此函数时遇到问题,因为我对显式特化的语法感到困惑。我已经尝试了许多不同的方法,但我还没有得到一个简单的例子来工作。
其次,我试图(最终)将该模板函数转换为(非模板)类的模板方法。我来的时候会穿过那座桥。
谢谢,
伊恩
答案 0 :(得分:3)
嗯,这是可能的,但不是一个更好的事情。明确的模板函数特化是一个黑暗的角落,但这是你如何做到的:
template< typename T > int f(){ ... }
template<> int f<int>(){ ... }
template<> int f<char>(){ ... }
一些相关的阅读:http://www.gotw.ca/gotw/049.htm
答案 1 :(得分:2)
首先,即使语法上可行吗?我觉得它是。
确实如此,但不要过于复杂 - 这只需要简单的重载:
int f()
{
return /* default, typeless implementation */;
}
template<typename T>
int f()
{
return /* type-specific implementation */;
}
template<>
int f<char>()
{
return /* char implementation */;
}
template<>
int f<int>()
{
return /* int implementation */;
}