gpt4 book ai didi

c++ - std::any 的 cout vector

转载 作者:太空狗 更新时间:2023-10-29 19:56:42 24 4
gpt4 key购买 nike

<分区>

我有一个 std::vectorstd::any , 所有这些都可以通过 << 打印(例如,只有整数和 float )。我很想拥有类似的东西

#include <experimental/any>
#include <iostream>
#include <vector>

int main() {
std::vector<std::experimental::any> v;

v.push_back(1);
v.push_back(3.14);

for (const auto& a: v) {
std::cout << a << std::endl;
}

return 0;
}

但是自std::any 之后就没有用了不知道<< :

error: no match for ‘operator<<’

到目前为止,我想出的唯一解决方法是将 vector 项显式转换为其中可能存在的任何数据类型,例如,

#include <experimental/any>
#include <iostream>
#include <vector>

int main() {
std::vector<std::experimental::any> v;

v.push_back(1);
v.push_back(3.14);

for (const auto& a: v) {
try {
std::cout << std::experimental::any_cast<int>(a) << std::endl;
} catch (const std::experimental::fundamentals_v1::bad_any_cast&)
{}

try {
std::cout << std::experimental::any_cast<double>(a) << std::endl;
} catch (const std::experimental::fundamentals_v1::bad_any_cast&)
{}
}

return 0;
}

这(也许是不必要的)冗长而且相当不灵活,因为 once 必须知道 vector 中可能出现的所有数据类型。

有没有vector<any>的变种?打印没有这些缺点?

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