簡體   English   中英

C ++指向模板函數的哪個類成員指針

[英]C++ pointer to template function which class member

我在“C”類中有以下功能

class C
{
  template<typename T> void Func1(int x);
  template<typename T> void Func2(int x);
};

template<typename T> void C::Func1(int x)
{
  T a(x);
}

template<typename T> void C::Func2(int x)
{
  T a(x);
}

這些函數僅在實現中使用模板。 簽名不包含模板參數。

是否可以定義指向此類模板函數的指針?

我嘗試了以下定義,但它導致編譯錯誤。

typedef template<typename T> void (СSomeClass::*TFuncPtr)(int);

實例化后,成員函數模板只是一個普通的成員函數,因此您可以使用普通的成員函數指針(最好的typedef如下):

typedef void (C::*mem_fun_ptr)(int);
mem_fun_ptr p = &C::Func1<Bar>;
//          IMPORTANT -- ^^^^^

帶下划線的部分是重要的部分。 您不能創建指向函數模板的指針,但您可以創建指向實例化函數模板的指針。

你只想要一個指向函數的指針嗎? 這很簡單:

class C
{
public:
  template<typename T> void Func1(int x);
};

typedef void (C::*TFuncPtr)(int);

int main()
{
 TFuncPtr ptr = &C::Func1<int>;
}

如果你想要別的東西,你可以展示一個使用你想要的指針的例子嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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