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

Can the return type inside templates in C++ be controlled?

本文关键字:控制 返回类型 内部 C++      更新时间:2023-10-16

我有一个类似于的模板函数

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