需求
cpp 如何让调用的函数返回不同的类型?
解决
std::variant
可以返回 std::variant
定义的类型。
#include <variant>
std::variant<int, double, std::string> GetDifferentValue(int choice) {
if (choice == 0) {
return 42;
} else if (choice == 1) {
return 3.14;
} else {
return "Hello, World!";
}
}
std::any
#include <any>
std::any GetDifferentValue(int choice) {
if (choice == 0) {
return 42;
} else if (choice == 1) {
return 3.14;
} else {
return "Hello, World!";
}
}
模板和多态
std::unique_ptr<Base> GetDifferentValue(int choice) {
if (choice == 0) {
return std::make_unique<IntType>(42);
} else if (choice == 1) {
return std::make_unique<DoubleType>(3.14);
} else {
return std::make_unique<StringType>("Hello, World!");
}
}
int main() {
auto value = GetDifferentValue(2);
value->print();
return 0;
}
函数的引用参数中使用模板
函数参数使用引用,也是一种方法
template<typename T>
void NetDataProcess::ParseNotifyResponseJson(const QByteArray line, T& data)
{
QString id = "";
QString value = "";
QString jsonString = QString::fromUtf8(line);
if (jsonString.startsWith("data: ")) {
jsonString.remove(0, 6);
}
// 解析 JSON 字符串
QJsonDocument doc = QJsonDocument::fromJson(jsonString.toUtf8());
// 检查解析是否成功
if (!doc.isNull() && doc.isObject()) {
QJsonObject jsonObj = doc.object();
// 获取 "id" 字段的值
id = jsonObj["id"].toString();
// 获取 "value" 字段的值
value = jsonObj["value"].toString();
// 输出结果
qDebug() << "ID:" << id;
qDebug() << "Value:" << value;
} else {
qDebug() << "Failed to parse JSON";
}
data = {id, value};
}