2014-03-01 69 views
0

我有許多使用相同通用函數/方法的類。目前我已經爲每個班級編寫了這些方法,但這涉及不必要的重複。所以我想將這些方法移到一個Utils類中,這個類可以被所有需要使用這些方法的類訪問。我認爲這可以通過GenericTemplate完成,但我沒有一個我能理解的例子。C++ CLI如何用許多其他類可訪問的方法創建utils類

這就是我現在做的(忽略了所有非必需品):

Genome.h:

ref class Genome 
{ 
public: 
    List<wchar_t>^ stringToList(String^ inString); // convert string to List with chars 
}; 

Genome.cpp:

List<wchar_t>^ Genome::stringToList (String^ inString) 
{ 
    List<wchar_t>^ tmpList = gcnew List<wchar_t>(); 
    int i; 
    for (i = 0; i < inString->Length; i++) 
     tmpList->Add(inString[i]); 
    return tmpList; 
} 

和典型的方法調用看起來像這樣:

cString->AddRange(stringToList(aLine)); // genome string is stored as one line 

其中CString的類型是List<wchar_t>^

所以,如果我是到stringToList方法移到Utils.hUtils.cpp類,會是什麼碼的樣子,和我怎麼調用這個和類Genome.cpp其他utils的方法和別的?

謝謝,1月

+0

看看[這篇文章](http://www.codeproject.com/Articles/8991/Using-generics-in-C-CLI)關於泛型。在開始的時候,有一個解釋泛型和模板之間差異的鏈接。關於make _Utils :: StringToList()_方法隨處可見,只需將其標記爲靜態即可。 – Jairo

+0

@Jairo:確實是靜態作品!這基本上解決了我目前的問題。我確實遇到過那篇文章,但我會再給它一些研究。謝謝,Jan – jdelange

回答

0

我把我的實用功能放在一個類,我標記爲抽象密封。由於該類是抽象密封的,因此不能創建它的實例,因此所有成員都必須聲明爲靜態。結果相當於具有免費功能。

E.g.在頭部,你就會有

public ref class MyUtils abstract sealed 
{ 

    // ........................................................................ 

    private: 

     static MyUtils(); 

    public: 

     static System::Double CalculateAverage (cli::array<System::Double>^ arrayIn); 



}; 

,並在.cpp

MyUtils::MyUtils() 
{ 
} 


System::Double MyUtils::CalculateAverage (cli::array<System::Double>^ arrayIn) 
{ 
    // the code doing the calculation... 
} 

您撥打任何靜態方法

例如調用此方法

cli::array<System::Double>^ values = gcnew cli::array<System::Double>(5); 
    // ... 
    // put some data in the array 
    // ... 
System::Double average = MyUtils::CalculateAverage (values); 

當然,你也可以使用泛型方法作爲這個類的成員。

相關問題