c++ - 模板类变量作为非模板类的成员
问题描述
我不是专业的 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
?
我很抱歉我的英语不好,不是我的母语,我希望问题很清楚。
提前致谢。
解决方案
这就是为什么存在构造函数初始化列表的原因:
class A{
public:
A()
: pointer(getAnotherClassPtr()), myTable(pointer, some_value)
{}
...
AnotherClassPtr* pointer;
table<aCertainStruct> myTable;
...
};
这将初始化并“调用” 的参数化构造函数table
,而不是默认构造函数。
如今,使用相对现代的编译器,您还应该能够在该类的第二次尝试中执行类似于您想要的操作A
,但是您必须使用“赋值”语法进行初始化,或者使用大括号{}
而不是括号()
(因为括号是针对成员函数的):
table<aCertainStruct> myTable{pointer, some_value};
这当然需要pointer
先初始化。
推荐阅读
- javascript - 无需身份验证即可从实时 Firebase 数据库登录
- javascript - 在等待 HTTPS 请求时,事件循环被卡住并且不会回答健康检查 - NodeJS + kubernetes
- android - Android:如何动态更改应用程序级资源的区域设置?
- python - 如何使用 os 从 Python 安装 openssl?
- angular - scrollIntoView() 在 Angular 中无法使用 {behaviour: 'smooth'}
- c# - IIS 应用程序池回收后有时会出现错误“已配置存储机制”(NHibernate)
- python - 为什么列表/字典理解在类中具有不同的范围?
- git - 通过 SSH 发布 Jenkins 显示 X 文件已传输,但没有显示
- c# - 在 UWP 中,如何在代码中更改样式的设置器?
- c++ - 无法从 SO 文件调用 SO 文件的函数 - C++ makefile