2016-12-25 146 views
0

由於有很多使用殘差圖的圖算法,我認爲實現一個模板類resGraph通過Objects Node和Edge進行參數化是有意義的,它實現了一些基本功能,如從一個圖形讀取圖形文件,打印流程並存儲關於圖形的所有相關信息。專門用於圖形的模板類

現在我想寫的類PushRelabel,我想成爲resGraph類模板的專業化。但我不只是想插入一些節點和邊緣類型,我還想擴展該類的功能,即我想向類中添加方法。如何才能做到這一點?

+0

這裏有什麼特別的?圖形的模板專業化與其他專業化沒有區別。 –

+0

我在搜索時找到的僅僅是專門的類型。但我也想添加方法。 – user3726947

回答

1

有很多圖庫,例如來自Boost的BGL。也許你應該看看他們。

向模板專業化添加方法不是問題。請注意,專業化可能與原始模板無關。例如:

template<typename T> 
struct A 
{ 
    void B(int); 
}; 

template<> 
struct A<int> 
{ 
    float C(char*); 
}; 

template<> 
struct A<double> 
{ 
    void D(int, int, int); 
}; 

這很好。對於不同的類型,您將擁有實例化,這些實例化之間沒有任何共同之處。你也可以這樣寫:

template<typename T> 
struct B : public A<T>   // Class template can have base class. 
{        // It can be either a class or instantiation 
    void B(int);     // of some class template. 
    void B2(int, int, int); 
}; 

template<> 
struct B<int> : public A<int> // Specialization for int. 
{ 
    void B(int); 
    void B2(int, int, int); 
}; 
+0

啊好的。但是有沒有辦法改變這個名字?因爲將所有算法調用爲相同的只是因爲我專門從殘差圖類中調出是非常尷尬的。 – user3726947

+0

所以我會寫結構B:公共A 並用模板<>替換模板部分以同時專門化模板參數? – user3726947