具有奇怪重复模板模式的数组?

时间:2011-09-30 05:11:03

标签: c++ visual-c++ visual-c++-2008 crtp

我有一个基于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世界。

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

1 个答案:

答案 0 :(得分:0)

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

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