gpt4 book ai didi

c++ - 使用 boost 图形库的模板化 typedef 汤

转载 作者:搜寻专家 更新时间:2023-10-31 00:45:38 24 4
gpt4 key购买 nike

我正在尝试创建一个扩展 boost 图形库行为的类。我希望我的类是一个模板,用户提供一个类型(类),用于在每个顶点存储属性。那只是背景。我正在努力创建一个更简洁的 typedef 来定义我的新类。

基于其他帖子,如 thisthis ,我决定定义一个包含模板化类型定义的结构。

我将展示两种密切相关的方法。我不明白为什么 GraphType 的第一个 typedef 似乎有效,而 VertexType 的第二个 typedef 却失败了。

#include <boost/graph/graph_traits.hpp>
#include <boost/graph/adjacency_list.hpp>

template <class VP>
struct GraphTypes
{
typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::bidirectionalS, VP > GraphType;
typedef boost::graph_traits< GraphType >::vertex_descriptor VertexType;
};

int main()
{
GraphTypes<int>::GraphType aGraphInstance;
GraphTypes<int>::VertexType aVertexInstance;
return 0;
}

编译器输出:

$ g++ -I/Developer/boost graph_typedef.cpp 
graph_typedef.cpp:8: error: type ‘boost::graph_traits<boost::adjacency_list<boost::vecS, boost::vecS, boost::bidirectionalS, VP, boost::no_property, boost::no_property, boost::listS> >’ is not derived from type ‘GraphTypes<VP>’
graph_typedef.cpp:8: error: expected ‘;’ before ‘VertexType’
graph_typedef.cpp: In function ‘int main()’:
graph_typedef.cpp:14: error: ‘VertexType’ is not a member of ‘GraphTypes<int>’
graph_typedef.cpp:14: error: expected `;' before ‘aVertexInstance’

同样的事情,只是避免在第二个 typedef 中使用 GraphType:

#include <boost/graph/graph_traits.hpp>
#include <boost/graph/adjacency_list.hpp>

template <class VP>
struct GraphTypes
{
typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::bidirectionalS, VP > GraphType;
typedef boost::graph_traits< boost::adjacency_list<boost::vecS, boost::vecS, boost::bidirectionalS, VP > >::vertex_descriptor VertexType;
};

int main()
{
GraphTypes<int>::GraphType aGraphInstance;
GraphTypes<int>::VertexType aVertexInstance;
return 0;
}

编译器输出看起来实际上是一样的:

g++ -I/Developer/boost graph_typedef.cpp 
graph_typedef.cpp:8: error: type ‘boost::graph_traits<boost::adjacency_list<boost::vecS, boost::vecS, boost::bidirectionalS, VP, boost::no_property, boost::no_property, boost::listS> >’ is not derived from type ‘GraphTypes<VP>’
graph_typedef.cpp:8: error: expected ‘;’ before ‘VertexType’
graph_typedef.cpp: In function ‘int main()’:
graph_typedef.cpp:14: error: ‘VertexType’ is not a member of ‘GraphTypes<int>’
graph_typedef.cpp:14: error: expected `;' before ‘aVertexInstance’

显然,第一个编译器错误是根本问题。我尝试在一些地方插入 typename 但没有成功。我正在使用 gcc 4.2.1

我该如何解决这个问题?

最佳答案

typedef typename boost::graph_traits<GraphType>::vertex_descriptor VertexType;
// ^^^^^^^^

应该修复它,虽然我不知道你试图把它放在哪里..你可能有其他我没有看到的问题。

关于c++ - 使用 boost 图形库的模板化 typedef 汤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6413466/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com