初始化基类

Initializing a base class

本文关键字:基类 初始化      更新时间:2023-10-16

从我可以收集,这应该工作,不是吗?

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)