如何使用默认构造函数在另一个类中创建模板类

时间:2011-08-03 12:35:57

标签: c++ templates

我有以下模板类

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;
};

我的问题是如何在MyClass构造函数中使用构造函数参数创建ThreadPool,因为我没有默认构造函数?

2 个答案:

答案 0 :(得分:2)

假设你的意思是“我在ThreadPool中没有默认构造函数:

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

假设你的意思是“我在MyClass中没有默认构造函数:

MyClass有一个默认构造函数,只要您提供自己的构造函数或者不提供任何其他构造函数。正如你的问题所在,它有一个编译器生成的默认构造函数。当然,这不会编译,因为编译器生成的默认构造函数只会调用所有(基类和)数据成员的默认构造函数,而唯一的数据成员pool属于不具有的类提供默认构造函数 因此,您需要提供自己的默认构造函数,如上例所示。

答案 1 :(得分:1)

与任何其他成员一样 - 这不是特定于模板实例化类型 - 在MyClass构造函数的初始化列表中。例如,对于默认构造函数:。

MyClass::MyClass()
   : pool(myFunction, myMinThread, myMaxThread, myExeCount)
{}