3

重複の可能性:
template<auto X> をエミュレートすることは可能ですか?

次の C++ コードは vc2010 で機能しました

template<class T, DWORD (T::*memFnPtr)() >
static DWORD WINAPI ThreadProcAdapter( __in LPVOID lpParameter )
{
    T* pThis = reinterpret_cast<T*>(lpParameter);
    return (pThis->*memFnPtr)();
}

class FooClass
{
public:

    DWORD ThreadProcFoo()
    {
        return 0;
    }
};

void fooUse()
{
    FooClass foo;
    CreateThread(NULL, 0, ThreadProcAdapter<FooClass, &FooClass::ThreadProcFoo>, &foo, 0, NULL);
}

質問: ThreadProcAdapter<> テンプレートでパラメーターを 1 つだけ使用することはできますか?? もしそうなら、クライアントが私たちのアダプターを使うのは比較的簡単です。

template<class T>
static DWORD WINAPI ThreadProcAdapter2( __in LPVOID lpParameter )
{
    //typedef 
    //theClass* pThis = reinterpret_cast<theClass*>(lpParameter);
    //return (pThis->*memFnPtr)();
    return NULL;
}

void fooUse2()
{
    FooClass foo;
    CreateThread(NULL, 0, ThreadProcAdapter2<&FooClass::ThreadProcFoo>, &foo, 0, NULL);
}

具体的には: メンバー関数ポインターがある場合

&FooClass::ThreadProcFoo

そのクラスの型を計算できますか

FooClass
4

0 に答える 0