与dynamic_properties和write_graphviz有关的boost :: graph编译问题

烤肉串

这个问题是关于boost :: graph以及如何处理与顶点(和/或边)相关的属性的。我对处理这个问题很困惑,但是我怀疑这可能是与模板相关的问题。

假设我有以下图形定义:

struct myVertex_t {
    int color;
};

typedef boost::adjacency_list<
    boost::vecS,                   // edge container
    boost::vecS,                   // vertex container
    boost::undirectedS,            // type of graph
    myVertex_t,                    // vertex properties
    boost::property<               // edge properties
        boost::edge_color_t,             // ???
        boost::default_color_type        // enum, holds 5 colors
    >
> myGraph_t;

AFAIK,这种存储顶点属性的方法称为“束属性”,似乎是存储此信息第三种方法,尽管在手册中说:

有两种图形属性:内部和外部。

回到我的主要问题。现在,我可以使用“点”格式实例化并打印图形:

 int main()
 {
    myGraph_t g;
    boost::add_edge(0, 1, g);

    boost::dynamic_properties dp;
    dp.property("color",   boost::get( &myVertex_t::color,  g ) );
    dp.property("node_id", boost::get( boost::vertex_index, g ) );
    boost::write_graphviz_dp( std::cout , g, dp);
 }

在这里在线

这是基于类似问题中的答案,并且可以编译。

现在,我想将打印分为一个单独的函数,因此我在模板化函数中编写了相同的代码,只是将具体类型替换为模板类型参数:

template<typename graph_t, typename vertex_t>
void RenderGraph( const graph_t& g )
{
    boost::dynamic_properties dp;
    dp.property( "color",   boost::get( &vertex_t::color,    g ) );
    dp.property( "node_id", boost::get( boost::vertex_index, g ) );
    boost::write_graphviz_dp( std::cout, g, dp );
}

int main()
{
    myGraph_t g;
    boost::add_edge(0, 1, g);

    RenderGraph<myGraph_t,myVertex_t>( g );
}

但这不能编译

property_map.hpp:361:44:错误:分配只读位置...

有任何想法我做错了吗?

property_map.hpp:361:44:错误:分配只读位置...

是的,令人遗憾的是,g那里的const使得默认的property工厂功能非法。如果模型允许,则以可写方式构造动态属性:

要求:PropertyMap必须对可读属性映射或读/写属性映射建模。

由于属性映射是可写的,因此动态属性也会编译写作分支。

您必须将参数设为非常量,或手动覆盖基础地图的“属性”特性(例如,请参见此处的注释(例如,图形的割集,Boost Graph Library)。

您可能会考虑将其报告为可用性问题,因为从逻辑上讲,属性应该在那里const

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

与dynamic_properties和write_graphviz有关的boost :: graph编译问题

来自分类Dev

有关从ruby源进行编译和升级的问题

来自分类Dev

有关程序编译的问题

来自分类Dev

有关打字稿编译的问题

来自分类Dev

有关程序编译的问题

来自分类Dev

Cassandra编译有关lambda的问题

来自分类Dev

通过boost编译问题

来自分类Dev

有关JIT编译器和安装的一些基本问题

来自分类Dev

有关IIS和localhost的问题

来自分类Dev

有关Servlet的问题和建议

来自分类Dev

与AsyncTask和FragmentManager有关的问题

来自分类Dev

Boost 库交叉编译的问题

来自分类Dev

有关jQuery hover(),setInterval范围和“ this”问题的问题-

来自分类Dev

有关私有MySQL实例和WordPress的问题

来自分类Dev

有关私有MySQL实例和WordPress的问题

来自分类Dev

boost :: dynamic_properties和不可变图对象

来自分类Dev

Facebook Graph API-与已安装该应用程序的朋友有关的问题

来自分类Dev

有关访问控制允许来源和CORS的问题

来自分类Dev

有关折叠和堆栈溢出的问题

来自分类Dev

有关静态和共享库的C问题

来自分类Dev

PHP有关输入和复选框的问题

来自分类Dev

有关cout和cin的C ++简单代码问题

来自分类Dev

有关“使用严格”和underscore.js的问题

来自分类Dev

有关使用malloc()和free()的问题

来自分类Dev

有关Python和类特定变量的问题

来自分类Dev

Android,与ViewPager和DrawerLayout有关的问题

来自分类Dev

有关Python名称空间和使用导入的问题

来自分类Dev

有关使用期货和完成人的问题

来自分类Dev

有关TCP校验和计算的问题