gpt4 book ai didi

c++ - 指向成员函数的指针的模板参数推导

转载 作者:太空宇宙 更新时间:2023-11-04 14:05:28 24 4
gpt4 key购买 nike

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

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);

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

最佳答案

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

关于c++ - 指向成员函数的指针的模板参数推导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17182744/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com