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

时间:2014-04-28 18:14:49

标签: c++ templates

我的模板化功能类似于:

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;)

在函数内部,需要从字符串表或数字表中提取并返回该值的逻辑。我玩弄了这个并且无法按照我的预期让它工作。看起来它应该是非常简单易行的。这是一种有效的方法和模板的使用吗?我查看了模板特化,但最后还是编写了两个独立的代码库,为什么不使用重载函数呢?还有更好的方法吗?

2 个答案:

答案 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" );