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之前的世界。
是否有已知的解决方案来解决这个问题,还是我只需要使用上面提到的非理想解决方案?
T在哪里使用类? – JohnPS
@JohnPS:它被用于处理句柄管理的代码部分(即关闭它等)......我没有复制那部分,因为它看起来不太相关。 – Mehrdad
'object []'数组是否存在混合类型?如果是的话,那么看起来你需要规则多态而不是CRTP。如果每次对'WaitForMultipleObjects'的调用都获得一个相同类型的数组,那么你可以创建一个模板函数。 – JohnPS