![](/img/trans.png)
[英]How to make variadic template class method take function pointer as argument with type derived from function template?
[英]Method function pointer template without naming class type
考慮這個template
函數,調用class T
對象的方法。
template<class T, void (T::*Method)()>
void circuitousInvoke(T* callee) {
(callee->*Method)();
}
例:
struct A {
void test() {};
}
circuitousInvoke<A, &A::test>(new A);
由於類型T已經從參數callee
知道,有沒有辦法避免鍵入這種類型?
circuitousInvoke<&A::test>(new A);
此問題僅涉及模板功能。 在這種情況下,繼承和其他基於類的解決方案不適用。 (在我的項目中使用包裝器對象會比輸入其他名稱更糟糕。)
在C ++ 17中可以使用auto
template<auto Method, typename T>
void circuitousInvoke(T* callee) {
(callee->*Method)();
}
接着
A a;
circuitousInvoke<&A::test>(&a);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.