2011-08-03 73 views
0

我有以下的模板類如何與出默認的構造函數另一個類

template <typename threadFuncParamT > 
class ThreadPool 
{ 
    // number of threads to be launced initially and added to thread pool. 
    ThreadPool(pThreadFunc pFunction, RtsInt16_t minThreads, RtsInt16_t maxThreads, RtsInt16_t maxExecCount); 
}; 

現在我想用另一個類

struct myStruct 
    //... 
}; 

class MyClass 
{ 
private: 

    ThreadPool<myStruct *> pool; 
}; 

我的問題是對象如何創建創建模板類ThreadPool與MyClass構造函數中的構造函數參數,因爲我沒有默認的構造函數?

+0

儘管你最近編輯過,你的問題仍然不清楚,因爲你仍然沒有解釋你指的是缺少默認構造函數的類。這就是爲什麼我必須回答我看到的兩種可能性。 – sbi

回答

2

假設你的意思是「因爲我沒有在ThreadPool默認構造函數:

MyClass::MyClass() 
: pool(&thrdFunc, 7, 42, 12) 
{ 
} 

假設你的意思是」因爲我沒有默認的構造函數中MyClass

MyClass有一個默認的構造函數只要你提供你自己的或者你不提供任何其他的構造函數。就像你的問題一樣,它有一個編譯器生成的默認構造函數。當然,這不會編譯,因爲編譯器生成的默認構造函數只會調用所有(基類和數據成員)的默認構造函數,而唯一的數據成員是不提供默認構造函數的類。
所以你需要提供你自己的默認構造函數,如上例所示。

1

像其他任何成員一樣 - 這不是特定於模板實例化類型 - 在MyClass的構造函數的初始化程序列表中。例如對於默認的構造函數:

MyClass::MyClass() 
    : pool(myFunction, myMinThread, myMaxThread, myExeCount) 
{} 
相關問題