我有一个基于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世界。
这个问题有一个已知的解决方案,还是我只需要使用上面提到的非理想解决方案?
答案 0 :(得分:0)
您可以混合使用CRTP和多态。见https://stackoverflow.com/a/13868014/1902095
我们的想法是拥有一个接口类BaseHandle
,它将被用作相关数组中的多态指针。 HandleT<>
将继承上述类并实现常用方法(以及那些因T而不同的方法)。