gpt4 book ai didi

c++ 获取 Boost::Graph 的顶点属性

转载 作者:太空狗 更新时间:2023-10-29 21:50:05 25 4
gpt4 key购买 nike

给定一个顶点:

class VertexProps {
public:
int id;
float frame;
string name;
};

我已经使用捆绑属性初始化了我的 boost 图。我知道我可以使用以下方法获取框架:

std::cout << "Vertex frame: " << boost::get(&VertexProps::frame, graph, vertex) << std::endl;
//Need to make this work: float frame = boost::get(&VertexProps::frame, graph, vertex);
//graph is a boost::adjacency_list and vertex is a boost::vertex_descriptor

但是,我想编写一个更通用的函数或包装器:

std::vector<float> frames;
std::string prop_name = "frame";
float frame = graph.get_vertex_prop(vertex, prop_name);
frames.push_back(frame);

我希望得到一些类似的东西:

typedef boost::variant< int, unsigned int, float, std::string > PropValType;
typedef boost::vertex_bundle_type<Graph>::type PropIdType;
typedef boost::graph_traits<Graph>::vertex_descriptor Vertex;

PropValType get_vertex_prop(Vertex& v, PropIdType pname)
{
boost::get(pname, graph, v);
//If pname = frame then return value as float (or cast boost::variant to float)
//If pname = name then return value as a string
}

我想避免这样的事情:

PropValType get_vertex_prop(Vertex& v, std::string pname) {
if (pname == "frame") {
boost::get(&VertexProps::frame, graph, v)
//return value as float
}
if (...)
}

最佳答案

如果在编译时没有任何宏魔术,就无法做到这一点。 C++ 不允许将字符串文字作为非类型模板参数,并且具有非常薄的反射功能。

您提出(并希望避免)的解决方案需要在运行时进行一些工作,通常应该避免。

宏观解决方案将遵循这些思路:

#define MY_GET(v, pname) boost::get(&VertexProps##pname, graph, v)
PropValType v = MY_GET(v, frame);

关于c++ 获取 Boost::Graph 的顶点属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6905536/

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