【发布时间】:2010-11-17 10:34:07
【问题描述】:
我正在使用 Boost Graph Library 并在此基础上构建了自己的类。
现在,我有以下功能:
template< class VERTEXPROPERTIES >
VERTEXPROPERTIES& properties(const Vertex& v) const
{
typename property_map<FilteredGraphContainer, vertex_properties_t>::const_type param = get(vertex_properties, graph_);
return param[v];
}
当我在这样的类模板中使用这个函数时:
template< class VERTEXPROPERTIES, class EDGEPROPERTIES >
class Graph
{
// all the code
};
它有效。 但是,当我想在这样的类中使用它时:
template < class GRAPH, class EDGE_PREDICATE, class VERTEX_PREDICATE >
class FilteredGraph
{
// all the code
};
并将 properties() 函数应用于 FilteredGraph 对象,编译器抱怨它找不到该函数。
据我目前发现,这可能是由于参数列表中缺少模板参数。
对于 Graph 类,这个模板参数很容易找到,因为它是在创建 Graph 对象时定义的。
但是对于FilteredGraph,应该可以从GRAPH-template参数中推导出来。
再说一次,我认为编译器仍然会在获取正确的返回值类型时遇到问题,因为这可能需要事先找出...
我真的很想在 properties() 函数中保留这个概念,因为它允许保持其他函数的通用性。
您有什么想法可以解决这个问题,并可能保留这个概念吗?
【问题讨论】:
-
请发布编译错误和类定义。你给我们没有信息。
-
对此我深表歉意。我没有在这里发布这个,因为我觉得它只会使问题变得混乱。编译器错误只是它找不到我的代码中使用的函数。我能够将其修复为 boost 库提供的 property_traits 功能。我会单独发布答案。
-
不,别担心。我不会混淆答案。编译错误通常非常有用。有时有点神秘,但更多时候,非常精确。
标签: c++ templates boost return-value