C++ 根据C+中的模板类型返回不同类型的对象+;

C++ 根据C+中的模板类型返回不同类型的对象+;,c++,templates,C++,Templates,我正在编写一个类,它包含不同类型的变量(比如std::string和keyword_-map),应该有一个value()函数,通过模板初始化retval=object.value()调用后返回字符串或关键字_-map值。到目前为止,函数如下所示: template <class T> T value() { if (std::is_same<T, std::string>::value) { return str_; } else

我正在编写一个类,它包含不同类型的变量(比如
std::string
keyword_-map
),应该有一个
value()
函数,通过模板初始化
retval=object.value()
调用后返回字符串或关键字_-map值。到目前为止,函数如下所示:

template <class T>
T value()
{
    if (std::is_same<T, std::string>::value) {
        return str_;
    }
    else if (std::is_same<T, keyword_map>::value) {
        return obj_;
    }
    else {
        return 0;
    }
}
模板
T值()
{
if(std::is_same::value){
返回str;
}
else if(std::is_same::value){
返回对象;
}
否则{
返回0;
}
}
编译它会引发以下错误:
错误C2440:'return':无法从'example\u class::keyword\u map'转换为'std::basic\u string'(编译源文件..\\ example\u files\example\u class.cpp)

是否有可能我必须通过
static\u cast
或类似的方式将返回值转换为模板返回类型?

您可以使用(从C++17开始)

如果值为true,则放弃语句false(如果存在),否则放弃语句true

e、 g

模板
T值()
{
如果constexpr(std::is_same::value){
返回str;
}
否则如果constexpr(std::is_same::value){
返回对象;
}
否则{
返回0;
}
}
在C++17之前,可以应用模板专门化

template <class T>
T value()
{
    return 0;
}

template <>
std::string value<std::string>()
{
    return str_;
}

template <>
keyword_map value<keyword_map>()
{
    return obj_;
}
模板
T值()
{
返回0;
}
模板
std::字符串值()
{
返回str;
}
模板
关键字映射值()
{
返回对象;
}

类型检查在编译时完成,通过函数的所有路径必须有效,代码才能编译。您可能需要考虑专门化来处理特殊情况。或者更好的是,使用(或者甚至是如果编译器支持它们,如果不考虑它们的Boost实现)。也请注意,<代码> 0 /代码>可能对所有类型都没有意义。您是否可以控制如何调用此函数?或者它是图书馆的一部分?如果
0
无法转换为
t
类型,您将如何处理这种情况?
返回0只是解释我的问题的一个例子。我想我会选择实际代码中的一个异常。
template <class T>
T value()
{
    return 0;
}

template <>
std::string value<std::string>()
{
    return str_;
}

template <>
keyword_map value<keyword_map>()
{
    return obj_;
}