我的模板化功能类似于:
template<class T>
T foo( string sReturnType )
{
//pseudo code
if( sReturnType = "string" )
{
lookup data in string table
return a string
}
else
{
look up in number table
return number answer
}
}
用法类似于:foo(&#34; string&#34;)
在函数内部,需要从字符串表或数字表中提取并返回该值的逻辑。我玩弄了这个并且无法按照我的预期让它工作。看起来它应该是非常简单易行的。这是一种有效的方法和模板的使用吗?我查看了模板特化,但最后还是编写了两个独立的代码库,为什么不使用重载函数呢?还有更好的方法吗?
答案 0 :(得分:3)
否 - 无法声明具有不同返回类型的函数(模板函数可能具有不同的返回类型,但这些将取决于模板参数)。
你可以返回一个封装所有可能的返回类型的类型(比如boost :: any或boost :: variant)。
答案 1 :(得分:-1)
你必须重载foo()
;几乎没有办法解决它。
std::string foo( std::string )
{
// look up data...
return std::string();
}
int foo( int )
{
// look up data...
return -1;
}
int i = foo( 1 );
std::string s = foo( "string" );