专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > C++

C++函数模板如何才能根据参数类型执行不同的代码

发布时间:2011-06-28 10:24:35 文章来源:www.iduyao.cn 采编人员:星星草
C++函数模板怎么才能根据参数类型执行不同的代码
如何让算法同时支持两种字符类型(char 和 wchar_t)?

写了一个子串替换的函数,原型如下:

char *ReplaceSubstr(char *pSrcStr,char *pFindStr,char *pNewStr);

现在,我想把其中的char换成wchar_t,就实现思路而已,不管是char还是wchar_t其实都是一样的,我不想直接把代码复制一份,然后把类型替换成wchar_t,我的目标是希望一份代码能够泛型支持两种字符类型。

首先,想到了c++函数模板
template<typename CHARTYPE>
CHARTYPE *ReplaceSubstr(CHARTYPE *pSrcStr,CHARTYPE *pFindStr,CHARTYPE *pNewStr);

但是这样做的话,由于我代码实现中用到了strstr函数,这个函数只支持char *类型,wchar_t类型的对应函数是wcsstr。

我希望可以能够根据当前的CHARTYPE是char还是wchar_t来自动调用strstr或wcsstr,请问要怎么实现?

或者还有没有其他办法,能够在只有一份代码的前提下,让算法同时支持两种类型?

补充一点,我要的是支持两种类型,那种 #ifdef UNICODE #else #endif的方式不是我要的,我的代码里可能会同时调用char和wchar_t的接口

比如
int main()
{
ReplaceSubstr("Hello World","He","AB");
ReplaceSubstr(L"Hello World",L"He",L"AB");
}

------解决思路----------------------
typeid
------解决思路----------------------
为 strstr 和 wcsstr 写一个包装函数,用同一个函数名,使用重载机制来让他们选择不同的类型。然后你的模板函数里面调用这个包装的函数就行了
------解决思路----------------------
你可以自己重载一个 wchar_t 的 strstr ,里面调用 wstrstr
------解决思路----------------------
前段时间刚好处理char跟wchar信息正好遇到了相似的问题。。。我是直接用的函数重载。。。但是推荐使用STL中经常使用的typetraits。。。

我的代码实现
http://blog.csdn.net/u010370871/article/details/48175783
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: