首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >重载所有字符串类型的模板化函数

重载所有字符串类型的模板化函数
EN

Stack Overflow用户
提问于 2013-07-18 15:19:16
回答 1查看 75关注 0票数 5

我有以下模板:

代码语言:javascript
运行
复制
template<class T>
void fn(T t){ }

对于任何可以转换为std::string的东西,我都想覆盖它的行为。

使用参数作为std::string指定显式模板专门化和非模板函数重载都只适用于传入std::string的调用,而不适用于其他函数,因为它似乎在尝试参数转换之前将它们与模板匹配。

有没有办法实现我想要的行为?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-18 15:25:08

在C++11中,像这样的例子可以帮到你

代码语言:javascript
运行
复制
#include <type_traits>
#include <string>
#include <iostream>

template<class T>
typename std::enable_if<!std::is_convertible<T, std::string>::value, void>::type
fn(T t)
{
   std::cout << "base" << std::endl;
}

template<class T>
typename std::enable_if<std::is_convertible<T, std::string>::value, void>::type
fn(T t) 
{
   std::cout << "string" << std::endl;
}

int main()
{
   fn("hello");
   fn(std::string("new"));
   fn(1);
}

live example

当然,如果没有C++11,也可以手动实现,也可以使用boost。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17717042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档