c++ - 如何在没有默认构造函数的情况下在另一个类中创建模板类

标签 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,因为我没有默认构造函数?

最佳答案

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

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

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

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

关于c++ - 如何在没有默认构造函数的情况下在另一个类中创建模板类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6926538/

相关文章:

c++ - 什么情况下实例化模板的参数不可用?

c++ - 从代码中获取像/proc/interrupts 这样的中断计数器?

c++ - 有没有办法为任何指针类型定义转换运算符?

wpf - 使用模板和样式的可编辑 TreeView 节点

c++ - 具有完整类型信息的循环依赖

c++ - 初始化使用模板参数作为类型的模板化类的静态成员?

c++ - 如何访问类构造函数中创建的对象

c++ - 一直读到 boost::asio::streambuf 中的字符串定界符

c++ - 为什么在此代码中当 "swap"函数写在 int main() 之后而不是之前时会发生交换?

javascript - 将 JSON 数据转换为 HTML 的基本 JavaScript 模板,其中模板字符串是 JavaScript 变量