簡體   English   中英

c++中的模板語法只是模板嗎<typename T> ?

[英]Is the template syntax in c++ just template <typename T>?

我試圖理解這個作為模板參數傳遞的函數 事實證明,在我讀過的一些關於模板的地方,你像這樣聲明它們:

template <typename MyTypeName>
class ...

現在怎么辦

template <void (*T)(int &)>

是什么意思? 這更像是一個關於語法的問題,而不是代碼的作用。 據我了解,它創建了一個模板化函數,它接受一個函數指針,這個函數接收一個整數作為參數的引用。

但是,我認為它不符合模板的語法。 typename關鍵字在哪里? 一般模板語法是什么?

我發現最接近的是: Why must we must do template <class/typename> T 而不僅僅是 template T 顯然,您可以定義“常量”模板參數。 所以我猜模板語法是這樣的:

template <arguments>

其中參數可以是以下類型的內容: typename Tint Nvoid T(int)等等。 如果是這樣,定義的好處是什么

template <void (*T)(int &)>
void doOperation()
{
  int temp=0;
  T(temp);
  std::cout << "Result is " << temp << std::endl;
}

像這樣,而不是做

void doOperation(void (*T)(int &))
{
  int temp=0;
  T(temp);
  std::cout << "Result is " << temp << std::endl;
}

?

C++ 中的模板語法只是template <typename T>嗎?

不。 模板參數有三種類型,

  • 非類型模板參數;
  • 類型模板參數;
  • 模板模板參數。

typename需要用於聲明類型模板參數的關鍵字,以及templatetypename ,需要用於聲明模板的模板參數關鍵字。 給定template <void (*T)(int &)>T被聲明為非類型模板參數(函數指針)。

以及為什么不直接執行void doOperation(void (*T)(int &)) ,因為我們必須將T聲明為模板參數,否則它將只是一個函數參數名稱。

暫無
暫無

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

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