我期待接受一個模板成員函數作爲模板參數。爲模板的成員函數指針作爲模板參數
例如,假定這個類:
class A
{
public:
template<typename... Args>
void Foo(Args...) {}
void Bar() {}
};
我想能夠調用:
Invoke<&A::Foo>(5, true);
而且有這樣的類似呼籲:
A a;
a.Foo(5, true);
我知道如何做到這一點Bar()
:
template<void (A::*F)()>
void Invoke()
{
A a;
(a.*F)();
}
int main()
{
Invoke<&A::Bar>();
}
是否有可能將其擴展到一個模板成員函數的指針?或者類似地,編寫一個像這樣的轉發函數,可以處理任何參數類型的函數。這是不行的,但一些類似:
template<typename... Args, void (A::*F)(Args...)>
void Invoke(Args... args)
{
A a;
(a.*F)(args...);
}
我能看到爲什麼這也許是不可能的,但如果這是真的你能指向標準爲何?我也想了解更多關於標準的細節。
嘗試'調用<&A ::美孚>(5,真)'。如果可行,編寫一個類型推導封裝*函數*模板。 –
@KerrekSB但我不知道如何指定在調用應該接受與此簽名的函數(沒有硬編碼)的函數類型,因爲你似乎有當您指定的成員函數指針類型指定的參數。 – JaredC
好了,你可以讓'Invoke'一個更強大的模板...... –