1. ホーム
  2. c++

[解決済み] テンプレートのパラメータに 'class' または 'typename' を使用しますか?重複

2022-03-16 08:53:02

質問

<ブロッククオート

重複の可能性があります。
C++ テンプレートにおけるキーワード 'typename' と 'class' の相違点

C++で関数テンプレートやクラステンプレートを定義する場合、このように記述することができます。

template <class T> ...

とか、こう書くこともできます。

template <typename T> ...

どちらか一方を選ぶべき正当な理由はありますか?


私は最も一般的な(そして興味深い)答えを受け入れましたが、本当の答えは、"いいえ、どちらかを好む良い理由はありません。

  • 両者は同等である(下記を除く)。
  • を常に使用する理由がある人もいます。 typename .
  • を常に使用しなければならない理由がある人もいます。 class .
  • 人によっては、両方を使う理由がある。
  • どちらを使ってもいいという人もいる。

ただし、C++17以前では テンプレートテンプレート パラメータを使用すると class の代わりに typename が必要でした。参照 user1428839の回答 の下にあります。(しかし、この特殊なケースは好みの問題ではなく、言語の要件であった)。

解決方法は?

Stan Lippmanはこのように話しています。 こちら . 面白いなと思いました。

概要 : ストロストラップはもともと class は、新しいキーワードの導入を避けるため、テンプレートで型を指定するようにしました。委員会の中には、このキーワードのオーバーロードが混乱を招くことを懸念する声もあった。その後、委員会は新しいキーワード typename を使用して構文の曖昧さを解消し、混乱を減らすためにテンプレートの型指定にも使用できるようにすることにしたが、後方互換性を保つためである。 class は、オーバーロードの意味をそのまま残している。