【发布时间】:2016-09-08 06:33:36
【问题描述】:
在我的一个项目中,我需要将 boost::variant which()-Function 的 int 映射到 boost::variant 的类型。
由于某些原因,地图不包含正确的 TVar 类型?这是为什么呢?
#include <boost/mpl/for_each.hpp>
#include <boost/variant.hpp>
#include <string>
#include <map>
#include <iostream>
using TVar = boost::variant<std::string, int, double>;
namespace Helper {
struct createMap {
std::map<int, TVar> map;
template<typename T>
void operator()(const T& t) {
auto x = TVar(t);
map[x.which()] = x;
}
};
}
bool createObject(int which, TVar& var) {
Helper::createMap c;
boost::mpl::for_each<TVar::types>(boost::ref(c));
if (c.map.find(which) != c.map.end()) {
var = c.map[which];
return true;
}
else {
return false;
}
}
int main() {
TVar var;
bool ok=createObject(0, var);
return 0;
}
【问题讨论】:
-
通过值或引用传递参数。
-
另外,每次调用
createObject时都会创建一个新地图。这是设计使然吗? -
谢谢。如此简单... :-( 我更正了代码。现在地图已填满,但不幸的是条目不正确。地图始终包含一个包含 std::string 的 boost::variant。
-
又傻了。将 == 替换为 =。现在它起作用了。非常感谢。我也许应该删除这个问题。 :-(
-
我每次都为第一种方法创建了一张地图。如果只有很少的电话,就没有问题。 :-)
标签: c++ boost-mpl boost-variant