[解決済み] テンプレートのパラメータに '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
は、オーバーロードの意味をそのまま残している。
関連
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み] *.h または *.hpp をクラス定義に使用します。
-
[解決済み] テンプレートにおける'typename'と'class'の違い?
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] 仮想デストラクタはいつ使うのか?
-
[解決済み] template "と "typename "キーワードはどこに、なぜ入れなければならないのですか?
-
[解決済み] リファレンスとポインタの使い分け
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み】高放射能環境下で使用するアプリケーションのコンパイルについて
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み】'cout'は型名ではない
-
[解決済み】fpermissiveフラグは何をするのですか?
-
[解決済み】エラー:strcpyがこのスコープで宣言されていない
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】Visual Studio 2013および2015でC++コンパイラーエラーC2280「削除された関数を参照しようとした」が発生する
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み] テンプレートにおける'typename'と'class'の違い?
-
[解決済み] C++のstructとclassの違いは何ですか?