可以使用SFINAE函数模板的两个版本之间的区别。
#include <iostream>
#include <string>
#include <type_traits>
std::string getRes() { return "1729"; }
template < typename T, typename std::enable_if< std::is_same<T,std::string>::value, void** >::type = nullptr >
std::string function()
{
return getRes();
}
template < typename T, typename std::enable_if< std::is_arithmetic<T>::value, void** >::type = nullptr >
unsigned long function()
{
return std::stoul(getRes());
}
int main()
{
unsigned long ul = function<unsigned long>();
std::string s = function<std::string>();
std::cout << ul << ' ' << s << '\n';
}
在C++ 14 auto
返回类型和enable_if_t
有点短。
#include <iostream>
#include <string>
#include <type_traits>
std::string getRes() { return "1729"; }
template < typename T, std::enable_if_t< std::is_same<T,std::string>::value, void** > = nullptr >
auto function()
{
return getRes();
}
template < typename T, std::enable_if_t< std::is_arithmetic<T>::value, void** > = nullptr >
auto function()
{
return std::stoul(getRes());
}
int main()
{
unsigned long ul = function<unsigned long>();
std::string s = function<std::string>();
std::cout << ul << ' ' << s << '\n';
}
您可以使用'stringstream'。 – mch
你可以使用'如果constexpr(blah){blah}',但stringstream可能更好。 – HolyBlackCat
stringstream解决方案似乎工作,谢谢。你想写一个答案,所以我可以接受它吗? – CatPlusPlus