c++ - 初始化基类

标签 c++

据我所知,这应该可行,不是吗?

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 作为构造函数。

关于c++ - 初始化基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33059989/

相关文章:

C++ - unordered_map 中的 unique_ptr 会导致错误

c++ - Qt 序列化 - 如何排除一个字段?

c++ - 发送一系列命令并等待响应

c++ -::myFunction() 是否属于全局命名空间?

python - 使用python事件并与c++交互

c++ - 声明时初始化的char数组?

c++ - Flutter和Linux

C++ 引用结构数组

c++ - 用于 C# 的托管 C++ 代码

c++ - 从第一个集合元素中删除第二个集合包含的元素而不进行迭代