C++ 重载所有字符串类型的模板函数
我有以下模板:C++ 重载所有字符串类型的模板函数,c++,template-specialization,overloading,C++,Template Specialization,Overloading,我有以下模板: template<class T> void fn(T t){ } 模板 void fn(T){} 我想覆盖它的行为,任何可以转换成std::string的东西 将参数指定为std::string的显式模板专门化和非模板函数重载仅适用于传入std::string的调用,而不适用于其他函数,因为它似乎在尝试参数转换之前将它们与模板匹配 有没有一种方法可以实现我想要的行为?类似的例子可以帮助您在C++11中使用 #include <type_traits>
template<class T>
void fn(T t){ }
模板
void fn(T){}
我想覆盖它的行为,任何可以转换成std::string
的东西
将参数指定为std::string
的显式模板专门化和非模板函数重载仅适用于传入std::string
的调用,而不适用于其他函数,因为它似乎在尝试参数转换之前将它们与模板匹配
有没有一种方法可以实现我想要的行为?类似的例子可以帮助您在C++11中使用
#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);
}
#包括
#包括
#包括
模板
typename std::enable_if::value,void>::type
fn(T)
{
标准::cout