<分区>
我有一个 std::vector
的 std::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>
的变种?打印没有这些缺点?