我正在使用Boost圖庫,並在此基礎上構建自己的類。獲取/推導返回值的模板函數中的類型
現在,我有以下功能:
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
};
和應用性能()函數將FilteredGraph對象,編譯器抱怨說,它無法找到該功能。
據我迄今發現,這可能是由於在參數列表中缺少模板參數。
對於Graph類,這個模板參數很容易找到,因爲它在創建Graph對象時被定義。
但是對於FilteredGraph,它應該能夠從GRAPH-template參數中推導出它。
然後,我認爲,編譯器會有問題得到正確的返回值類型,因爲這可能有必要事先找出...
我真的很想保留這個概念與屬性()函數因爲它允許保持通用的其他功能。
你有什麼想法如何解決這個問題,可能保持這個概念?
請發佈編譯錯誤和類定義。你給我們**沒有**信息。 – 2010-11-17 10:38:39
我對此表示歉意。我沒有在這裏發表,因爲我覺得它只會混淆這個問題。編譯器錯誤只是它找不到在我的代碼中使用的函數。我能夠將它修復爲由boost庫提供的property_traits功能。我會單獨發佈答案。 – Shadow 2010-11-17 12:25:09
不用擔心。我不會混淆這個答案。編譯錯誤通常非常有用。有時候有點神祕,但非常經常,非常精確。 – 2010-11-17 13:13:11