[英]Template Argument Deduction for Pointer to Member Function
我知道還有很多其他類似的問題,但是我看過的所有問題似乎都不適用於我正在做的事情。 我所擁有的關鍵是:
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 ++編譯器中的一個已確認錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.