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_;
}