1

Windows 用の CRTP ベースのラッパーがあります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 に答える