繁体   English   中英

可以控制C ++中模板内的返回类型吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM