1

我有一个基于 CRTP 的 Windows 包装器HANDLE

#include <windows.h>

template<class T>
class HandleT
{
    HANDLE handle;

    operator HANDLE() const { return this->handle; }

    static ULONG WaitForMultipleObjects(DWORD count, /* ??? */ objects[])
    {
        return WaitForMultipleObjects(count, ...);
    }
};

class EventHandle : Handle<EventHandle>
{
    //...
};

class FileHandle : Handle<FileHandle>
{
    //...
};

我遇到的麻烦是,我不知道???上面可以用什么代替。我不能说HandleT<T>,因为它们可以是不同类型的句柄,它们不适合数组。而且我不想说HANDLE,因为这样该函数根本不会对HandleT对象起作用——用户不妨完全避免调用包装器。而且我不能使用可变参数模板,因为我还处于 C++0x 之前的世界。

这个问题有已知的解决方案,还是我只需要使用上面提到的非理想解决方案?

4

1 回答 1

0

您可以混合使用 CRTP 和多态性。见https://stackoverflow.com/a/13868014/1902095

这个想法是有一个接口类,BaseHandle它将用作相关数组中的多态指针。HandleT<>将继承上述类并实现通用方法(以及那些与 T 不同的方法)。

于 2012-12-24T00:10:01.683 回答