[英]Can the return type inside templates in C++ be controlled?
我有一个模板化的功能类似于:
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(“string”)
在函数内部,需要有从字符串表或数字表中提取并返回该值的逻辑。 我玩弄了这个并且无法按照我的预期让它工作。 看起来它应该是非常简单易行的。 这是一种有效的方法和模板的使用吗? 我查看了模板特化,但最后还是编写了两个独立的代码库,为什么不使用重载函数呢? 有没有更好的办法?
否 - 没有办法声明具有不同返回类型的函数(模板函数可能具有不同的返回类型,但这些将取决于模板参数)。
你可以返回一个封装所有可能的返回类型的类型(比如boost :: any或boost :: variant)。
你必须重载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" );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.