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