gpt4 book ai didi

c++ - 作为非模板类​​成员的模板类变量

转载 作者:行者123 更新时间:2023-11-28 01:30:44 25 4
gpt4 key购买 nike

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

我有一个模板类:

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

...
}

我有一个标准类(class)。在这个类中,我想创建一些 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);
...

正如我所说,这是行不通的;

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

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

提前致谢。

最佳答案

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

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

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

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


现在有了相对现代的编译器,你应该也能在 A 类的第二次尝试中做一些类似于你想要的事情,但是你必须使用“赋值”语法初始化,或大括号 {} 而不是圆括号 ()(因为圆括号用于成员函数):

table<aCertainStruct> myTable{pointer, some_value};

这当然需要先初始化pointer

关于c++ - 作为非模板类​​成员的模板类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51630346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com