簡體   English   中英

沒有“typename”或“class”的c ++模板

[英]c++ templates without “typename” or “class”

我習慣寫這樣的模板:

template<typename T>
void someFunction(SomeClass<T> argument);

但是 - 現在我在另一個寫成這樣的線程中遇到了模板:

template<U>
void someFunction(SomeClass<U> argument);

據我所知,可以互換地使用“typename”和“class”(除了有關嵌套類型的一些細節......)。 但如果我不在括號中放一個關鍵字,這意味着什么呢?

謝謝!

有問題的線程: 為智能指針編寫復制構造函數的問題

那段代碼錯了(拼寫錯誤)。 在這種情況下必須有一個typenameclass


但是,這並不意味着所有模板參數都必須以typename / class開頭。 這是因為除了類型之外,模板參數也可以是整數常量,因此以下代碼可以工作:

// template <int n>, but n is not used, so we can ignore the name.
template <int>
void foo(std::vector<int>* x) {
}

int main () {
  foo<4>(0);
}

以下是:

typedef int U;

// template <U n>, but n is not used, so we can ignore the name.
template <U>
void foo(std::vector<U>* x) {
}

int main () {
  foo<4>(0);
}

這就是我在評論中詢問U是否為typedef的原因。

我認為這只是一個錯誤的人要求忘記添加“typename”或“class”。 答案只是復制/粘貼代碼,這也很糟糕。

我敢肯定你是一個宏。 我不認為僅僅使用typedef代替U,因為編譯器必須在括號中看到兩個關鍵字“class”或“typename”中的任何一個才能編譯模板。

把'U'放在那里的人對自己的好處有點太聰明了。 因此你的困惑。

歡迎來到維護其他人的臟代碼的世界。

如果U是一個類型,那么這是一個模板專門化

暫無
暫無

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

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