我目前正在使用带有字符串数据类型的映射作为键和变量值。我依靠boost :: variant库来定义地图数据类型。我目前正在关注boost :: variant的一些教程,用于从地图中提取值,而不必在迭代时指定我想要检索的确切数据类型值。来源:https://theboostcpplibraries.com/boost.variant我想要类似通用数据类型的最后一个例子,但不是打印我返回它们的值。以下内容似乎无法正常工作。
struct output : public boost::static_visitor<>
{
template <typename T>
T operator()(T t) const { return t }
};
我还实例化一个地图,同时用字符串数据类型作为键和boost :: variant类型作为值填充它;然后迭代遍历地图并处理值。
std::map<std::string,boost::variant<int, double, long long, std::string>> _keyPairValue;
for(auto &x: _keyPairValue)
{
// appending a key pair value to a bson object which is part of mongo sdk
b << x.first << boost::apply_visitor(output{},x.second);
}
我想要像通用数据类型的最后一个例子,但不是打印我返回它们的值。
您可能希望operator()
重载,例如:
struct process : public boost::static_visitor<>
{
void operator()(double d)
{
// process d ...
}
void operator()(char c)
{
// process c ...
}
void operator()(const string& s)
{
// process s ...
}
};
int main()
{
boost::variant<double, char, std::string> v;
v = 3.14;
boost::apply_visitor(process{}, v);
v = 'A';
boost::apply_visitor(process{}, v);
v = "Boost";
boost::apply_visitor(process{}, v);
}