【发布时间】:2016-05-11 14:48:52
【问题描述】:
我被困住了:)。我有两级层次结构,每个级别都有子节点。 目标是使用这个结构来填充 gui 树。我正在尝试以通用方式访问变体成员的子节点。以下代码无法编译,使用 vs2013。我会很感激帮助和/或建议 关于设计变更。
#include "stdafx.h"
#include <memory>
#include <string>
#include <vector>
#include <boost/variant.hpp>
class base {};
class A : public base
{
public:
std::vector<std::shared_ptr<base>> & lst(){ return _lst; }
private:
std::vector<std::shared_ptr<base>> _lst;
};
class B : public base
{
public:
std::vector<std::shared_ptr<A>>& lst() { return _lst; }
private:
std::vector<std::shared_ptr<A>> _lst;
};
using bstvar = boost::variant<A, B>;
class lstVisitor : public boost::static_visitor<>
{
public:
template <typename T> std::vector<std::shared_ptr<base>>& operator() (T& t) const
{
return t.lst();
}
};
int _tmain(int argc, _TCHAR* argv[])
{
bstvar test;
auto& lst= boost::apply_visitor(lstVisitor{}, test);
return 0;
}
【问题讨论】:
标签: c++ boost apply visitor-pattern