如何获取成员函数的引用类型?

时间:2012-11-12 19:54:05

标签: c++ visual-c++ c++11

  

可能重复:
  Is it possible to emulate 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&lt;&gt;模板只使用一个参数??如果是这样,客户端使用我们的适配器将相对容易。

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

0 个答案:

没有答案