gpt4 book ai didi

c++ - 有没有办法根据函数参数值动态更改 C++ 中函数的返回类型?

转载 作者:行者123 更新时间:2023-12-03 06:53:54 26 4
gpt4 key购买 nike

我正在处理一个问题,要求我根据我提供的函数参数值返回不同的返回类型。

我想做这样的事情--

在下面的代码中,doSomething()是一个已经存在的函数(被很多客户使用)需要 mode作为函数参数,并返回 std::list<ReturnType>已经。

基于模式值,我必须创建另一个返回 shared_future<std::list<ReturnType>> 的子功能.

我如何更改此代码,以便它可以根据模式值返回两种返回类型之一?

备注:ReturnTypetemplate typename我们正在为整个类(class)使用。

代码:

    std::shared_future<std::list<ReturnType> > futureValue() {
return functionReturningSharedFuture();
}

std::list<ReturnType> listValue() {
return functionReturningList();
}
std::list<ReturnType> doSomething(int mode) {
if(mode == 1){
// new functionality that I added
return futureValue(); // This (obviously) errors out as of now
}
else{
// already there previously
return listValue();
}
}

int main() {
doSomething(1);
return 0;
}

我如何更改此代码,以便它可以根据模式值返回两种返回类型之一?

约束和问题:

  1. 如果我们提供一个额外的函数参数(比如 true 值),这个问题可以通过函数重载轻松解决,但是那个额外的参数没有用,因为我们已经在使用 mode 了。 .此外,添加几乎没有用处的变量也不是好的设计。
  2. 主要限制之一是有些客户已经在使用这个 doSomething()期待 std::list<ReturnType> , 所以我不能返回 boost::anystd::variant或任何类似的东西。
  3. 我尝试使用 std::enable_if ,但它没有成功,因为我们在运行时获取模式值。
  4. 我们不能使用模板元编程,因为那会改变我们的函数在客户端被调用的方式。我们负担不起的事情。

谢谢。

最佳答案

这是不可能的。

您只能拥有一个具有给定签名的函数。如果您的调用代码已经期望它返回 std::list<ReturnType> , 而已;你完成了。

如果您可以保证所有现有的调用代码看起来像

auto l = obj.doSomething(1);

然后您可能会将返回类型更改为看起来std::list 的类型任何调用代码。但是如果有任何调用代码看起来像

std::list<ReturnType> l = obj.doSomething(1);

那就不谈了。

您可能需要重新考虑您的设计。

关于c++ - 有没有办法根据函数参数值动态更改 C++ 中函数的返回类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64329757/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com