【发布时间】:2015-04-30 22:39:35
【问题描述】:
那么使用 C++14 中新的 auto 返回类型推导,有没有办法创建具有不同返回类型的函数?
例如:
auto replaceStr(string base, string search, string replace) {
size_t found = base.find(search);
if (found == string::npos) {
return false; //Return this is replace is not found
}
else {
base.replace(found, (found+search.length()), replace);
return base; //Return this after the replacement
}
}
这行不通,我知道。那么有没有办法让它工作呢?
编辑: cmets 中的大多数人都告诉我这是不可能的,因为编译器不知道函数在编译时的返回类型。那么也许我们可以让函数有一个带有可选返回类型的默认返回类型?
【问题讨论】:
-
不。没有办法让它工作。您可以做的最接近的方法是创建一个基类并声明返回该类的函数。
-
这样做对 C++ 来说是一个巨大的改变。函数的返回类型在编译时是未知的。您应该考虑
std::optional<std::string>或更明确的信息,以了解您的返回值所携带的信息。就个人而言,如果您要返回替换是否做了任何事情,则返回参数似乎很奇怪。 -
如果你能做到这一点,你会将结果存储在什么地方? ;)
-
有没有一种语言可以让你返回不同的类型?
-
您应该使用
boost::optional之类的东西,或者如果您的平台上可用,则它是std等价物。