初始化基类
Initializing a base class
从我可以收集,这应该工作,不是吗?
struct ViewOfFile {
void* p = nullptr;
ViewOfFile(HANDLE hMap, int64_t OffsetB, SIZE_T SizeB, bool WriteAccess) {
DWORD ViewAccessMode = FILE_MAP_READ | (WriteAccess ? FILE_MAP_WRITE : NULL);
LARGE_INTEGER LI = { OffsetB };
p = MapViewOfFile(hMap, ViewAccessMode, LI.HighPart, LI.LowPart, SizeB);
if (p == nullptr) throw Exception("ViewOfFile: Failed to create view.");
}
~ViewOfFile() {
if (p) UnmapViewOfFile(p);
}
operator void*() const { return p; }
operator char*() const { return reinterpret_cast<char*>(p); }
};
template <typename T>
struct ViewOfFileAs : ViewOfFile {
T* as;
ViewOfFile(HANDLE hMap, int64_t OffsetB, SIZE_T SizeB, bool WriteAccess) : ViewOfFile(hMap, OffsetB, SizeB, WriteAccess) {
as = reinterpret_cast<T*>(p);
}
};
然而,模板类构造函数给了我一个错误"只有构造函数可以有基/成员初始化列表"。为什么会发生这种情况? 我想你只是在模板结构的定义中有一个打字错误:你写ViewOfFile
而不是ViewOfFileAs
作为构造函数
ViewOfFile(HANDLE hMap, int64_t OffsetB, SIZE_T SizeB, bool WriteAccess)
应该ViewOfFileAs(HANDLE hMap, int64_t OffsetB, SIZE_T SizeB, bool WriteAccess)
相关文章:
- C++类 - 初始化列表 - 递归 - 按值传递
- 何时为派生类初始化 vptr?
- 虚拟基类初始化
- 类初始化中的静态 lambda
- 如何防止在基类初始化器中调用默认构造函数?
- 如何在派生类中存储基类初始化期间获得的信息
- 是否可以在基类初始化器列表中传递成员对象
- 多重继承、复制构造函数和基类初始化
- 是否将类初始化的常量成员传递给基构造函数
- C++是否要求您从其派生类初始化基类成员
- 如何使用运行时选择基 CTOR 初始化不可复制的基类
- 继承和复制构造函数-如何从基类初始化私有字段
- 在使用虚拟继承时,我可以避免重复的基类初始化吗
- 基类初始化器和成员变量初始化器的顺序重要吗
- 在初始化列表中基类初始化之前调用函数
- 虚拟基类初始化
- 尽管类名与C++完全匹配,但模板基类初始化构造函数失败
- 初始化派生类初始化器列表中的基类成员
- 了解基类初始化
- 关于派生类初始化中的基类