首页 > 解决方案 > 模板类变量作为非模板类​​的成员

问题描述

我不是专业的 C++ 开发人员,我不确定是否可以做我想做的事。

我有一个模板类,如:

template < typename T >
class table
{
public
table ( AnotherClassPtr* handler, int s);
table<T>& operator<<(const T& table);
table<T>& operator>>( T& table);

...
}

我有一个标准班。在这个类中,我想创建一些table对象成员。埃斯:

class A{
public:
 ...
AnotherClassPtr* pointer;
table<aCertainStruct> myTable;
...
}

它不起作用,因为我错过了table. 但是我不能创建一个默认构造函数,因为我需要向table类传递一个指针,AnotherClassPtr该指针是在我想调用我定义的构造函数之前在类 A 的构造函数中创建的table。埃斯:

//inside the constructor of the A class.
....
pointer= getAnotherClassPtr();
table<aCertainStruct> myTable ( pointer, 42);
...

[尝试] 下面的东西可以编译,但没有按我的预期工作。事实上,如果我尝试调用类表的某些功能,它就不起作用。

class A{
public:
 ...
AnotherClassPtr* pointer;
table<aCertainStruct> myTable ( AnotherClassPtr*, unsigned int)
...
}

// in the constructor of the A class
....
pointer= getAnotherClassPtr();
table<aCertainStruct> myTable ( pointer, 42);
...

正如我所说,这不起作用;

问:是否可以将模板类变量创建为非模板类​​的成员?或者在其他工作中:是否可以table在类声明中定义一个成员,A然后在构造函数中定义调用我的用户定义构造函数的表对象A

我很抱歉我的英语不好,不是我的母语,我希望问题很清楚。

提前致谢。

标签: c++classtemplatesconstructor

解决方案


这就是为什么存在构造函数初始化列表的原因:

class A{
public:
    A()
        : pointer(getAnotherClassPtr()), myTable(pointer, some_value)
    {}

    ...
    AnotherClassPtr* pointer;
    table<aCertainStruct> myTable;
    ...
};

这将初始化并“调用” 的参数化构造函数table,而不是默认构造函数。


如今,使用相对现代的编译器,您还应该能够在该类的第二次尝试中执行类似于您想要的操作A,但是您必须使用“赋值”语法进行初始化,或者使用大括号{}而不是括号()(因为括号是针对成员函数的):

table<aCertainStruct> myTable{pointer, some_value};

这当然需要pointer先初始化。


推荐阅读