指向成员函数的模板参数推导

时间:2013-06-19 04:09:44

标签: c++ templates c++-cx

我知道还有很多其他类似的问题,但我所看到的那些问题似乎都不适用于我正在做的事情。我所拥有的主旨是:

template <typename T>
void CallFn(T *p, void (T::*pfn)(void))
{
    (p->*pfn)();
}

使用:

调用
class Foo
{
public:
    void Bar(void);
}
...
Foo *p = ...
CallFn(p, &Foo::Bar);

但是这给了我一个错误,说编译器不能推导出指向成员函数的指针的模板参数。如果我改为使用这样的结构:

template <typename T>
class Wrapper
{
public:
    void operator()(T *p, void (T::*pfn)(void))
    {
        (p->*pfn)();
    }
};
...
Foo *p = ...
Wrapper<Foo> x;
x(p, &Foo::Bar);

它有效,但语法更加可怕。我只是想知道为什么编译器可以推断出类的成员函数的类型,而不是函数。

1 个答案:

答案 0 :(得分:0)

所以,这里似乎有一些事情发生。首先,调用约定是错误的,PMF中应该有__cdecl。其次,在这样做之后,问题仍然存在。这是Visual Studio VC ++编译器中确认的错误