[英]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 T
、 int N
、 void 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
需要用於聲明類型模板參數的關鍵字,以及template
和typename
,需要用於聲明模板的模板參數關鍵字。 給定template <void (*T)(int &)>
, T
被聲明為非類型模板參數(函數指針)。
以及為什么不直接執行void doOperation(void (*T)(int &))
,因為我們必須將T
聲明為模板參數,否則它將只是一個函數參數名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.