显式模板函数和方法专业化

时间:2012-05-18 01:48:20

标签: c++ templates template-specialization

我一直在寻找一个明确的答案,而我只是在网上发现一些零碎的东西。

我有一个功能,它需要根据类型变量采取不同的行动。该函数不带参数,因此重载不起作用,导致模板特化。 E.g:

//Calls to this function would work like this:
int a = f();
int b = f<int>();
int c = f<char>();
//...

首先,即使语法上可行吗?我觉得它是。仍在进行中。

我在定义此函数时遇到问题,因为我对显式特化的语法感到困惑。我已经尝试了许多不同的方法,但我还没有得到一个简单的例子来工作。

其次,我试图(最终)将该模板函数转换为(非模板)类的模板方法。我来的时候会穿过那座桥。

谢谢,
伊恩

2 个答案:

答案 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 */;
}