C++ boost::graph自定义权重类型:是否需要数值限制?

C++ boost::graph自定义权重类型:是否需要数值限制?,c++,boost-graph,numeric-limits,C++,Boost Graph,Numeric Limits,我在boost图中有一个自定义边属性(MyWeight),希望应用Dijkstra最短路径搜索 在boost::运算符的帮助下,我的权重类型是可加、可减、小于可比和相等可比 因为我知道搜索必须从某个东西开始,我需要一个相当于零的值,并找出一个节点是否可以到达,一个非常大的东西 MyWeight weight_zero(...), weight_inf(...); // now, weight_zero is less than all other weights, weight_inf gre

我在boost图中有一个自定义边属性(
MyWeight
),希望应用Dijkstra最短路径搜索

在boost::运算符的帮助下,我的权重类型是可加、可减、小于可比和相等可比

因为我知道搜索必须从某个东西开始,我需要一个相当于零的值,并找出一个节点是否可以到达,一个非常大的东西

MyWeight weight_zero(...), weight_inf(...);

// now, weight_zero is less than all other weights, weight_inf greater than all other weights.

boost::dijkstra_shortest_paths( G, target_idx, boost::predecessor_map(&predecessors[0])
    .distance_map(&distances[0])
    .distance_inf(weight_inf)
    .distance_zero(weight_zero)
            );
这是我使用自定义重量的原则。它使用GCC4.8.1进行编译(并且似乎工作正常),但使用GCC4.7.3时,我得到以下错误(稍微缩短):

/usr/include/c++/4.7/limits:-1:在“static constexpr\u Tp std::numeric\u limits::max()[with\u Tp=MyWeight]的实例化中:
/usr/include/c++/4.7/limits:313:错误:调用“MyWeight::MyWeight(int)”时没有匹配函数
MyWeight
实际上是一个模板)

我将此消息解释为“您的类型没有std::numeric_限制”,另一方面,我告诉BGL要使用哪个极值,但不理解它为什么尝试调用numeric limits。我认为最好的尝试是让
数值限制
识别我的自定义数据类型

有人能告诉我如何做到这一点吗

我发现了第一个提示,但示例使用了
数字和
数字10
等成员,我想知道它们的来源

编辑


这是一个和我一样的例子。无法编译它,错误请参见上文。

这似乎是命名参数包装中的一个错误(或缺陷;我不确定它是否可以修复),即使未使用默认值,它也会扩展默认值。如果使用位置参数重载并手动填写中的所有参数,
数值限制
是不需要的。

如果还没有,您可能需要。我会这样做。我创建了一个拒绝编译的示例程序,目前无法使用其他版本进行测试,但它是相同的方案。
/usr/include/c++/4.7/limits:-1: In instantiation of 'static constexpr _Tp std::numeric_limits<_Tp>::max() [with _Tp = MyWeight<2, MyEvaluator>]':
/usr/include/c++/4.7/limits:313: error: no matching function for call to 'MyWeight<2, MyEvaluator>::MyWeight(int)'