代码改变世界

ubuntu环境下c++ 模板特化的编写

2013-08-07 10:51  playerboy  阅读(351)  评论(0编辑  收藏  举报

要写一个将各种数据类型转化成字符串的函数,之前写了多个函数重载,然后用一个宏定义根据类型把它们给调用起来,但是代码写了老大一堆,看着就不舒服,今天准备用模板把它们给解决掉。昨晚在vs上试了下函数模板,之前虽然接触过,但是写的不多,所以有点手生,不过昨晚还是写的很好。今天想一下子就移植到ubuntu上来,应用到代码中的,没想到冒了一大堆错误,看了一下,基本上是重复定义的问题。改了又改,还是不行,google吧,发现一篇不错的文章,提示用内联写一下,试了试,竟然编译通过了。简单的代码示例如下:

class A

{

template <typename Type> inline
string DataToStr(const Type &value)
{
char szChar[20] = "";
sprintf(szChar, "%d", value);
return szChar;
}

};

template <> inline

string DataToStr(const float &value)
{
char szChar[20] = "";
sprintf(szChar, "%d", value);
return szChar;
}

 如果想用类名直接访问,则可以把非特化的函数模板声明为static就可以了。

参考网页:http://blog.csdn.net/sunny3106/article/details/7485047

 解决方法有三个:

1. 在定义特化模板函数的时候,定义为extern函数,然后在template.cpp中实现。

2. 定义为一个inline函数。

3. 定义为一个static函数。

具体看代码复杂程度而定,一般用inline比较多,如果代码比较复杂的话,extern也可以。static用的很少,因为效率会比较低。

以及:http://blog.csdn.net/kikikind/article/details/2713357,中午不瞌睡的话,仔细看看。