簡體   English   中英

沒有命名類類型的方法函數指針模板

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM