gpt4 book ai didi

c++ - 如何处理为相同输入数据类型返回不同数据类型的 api?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:59:15 26 4
gpt4 key购买 nike

如何处理为相同输入数据类型返回不同数据类型的 api?

看下面的例子,apicall 应该根据输入属性返回日期或字符串:

#include <iostream>
#include <string>

using namespace std;

???? apicall(string datatype, string attribute)
{
// code
}

int main(int argc, char** argv)
{
string datatype = "Thomas"
string attribute = "bithday"
cout << apicall(datatype, attribute) << endl;

string datatype = "Thomas"
string attribute = "address"
cout << apicall(datatype, attribute) << endl;
}

什么可以代替 ????(apicall 返回数据类型)以及如何处理这些情况?

我正在尝试理解这些概念,因为我迄今为止的经验是使用 duck typed 脚本语言。

最佳答案

理想的解决方案是使用 std::variant ,这是一个安全的 union 类型,例如。

这允许您编写以下内容:

using DateOrString = std::variant<DateType, std::string>;

DateOrString api_call(std::string, std::string) {
// you can return both DateType and std::string
}

// ...
auto result = api_call("", "");
auto& str = std::get<std::string>(result);

不幸的是,std::variant 是一个 C++17 特性。但是不同的编译器已经支持它。

如前所述,boost有一个 variant 类,您可以将它用于任何 C++ 标准


作为最后一个选项,您可以实现一个“类似变体”的类来处理日期和字符串。您的函数应该返回它。

Here演示如何快速实现此类类。

请注意,该类是安全的,因为在运行时会检查类型。

作为一个变体对象,你的被调用函数应该在类型上分支,像这样:

auto result = api_call(/*...*/);
if (result.is_string()) {
// result is a string
const auto& str = result.get_string();
} else {
// result is a date
const auto& date = result.get_date();
}

关于c++ - 如何处理为相同输入数据类型返回不同数据类型的 api?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45442192/

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