tag:blogger.com,1999:blog-3636872937372639901.post2428689888364430547..comments2024-03-27T21:24:43.584+09:00Comments on 本の虫: C++のspecializationはもう少しましな用語を使えなかったものか江添亮http://www.blogger.com/profile/13387122818743087721noreply@blogger.comBlogger3125tag:blogger.com,1999:blog-3636872937372639901.post-45753786047498324082015-10-31T18:44:50.801+09:002015-10-31T18:44:50.801+09:00あらら、<typename T>が消えちゃってます。
修正修正。
プライマリー・テン...あらら、<typename T>が消えちゃってます。<br />修正修正。<br /><br /> プライマリー・テンプレート定義(これは当然ですが普通のクラスには対応するものはないです)<br /> template<typename T> class foo {};<br /><br /> 部分特殊化テンプレート定義(これもテンプレートのままなので普通のクラスに対応しないです)<br /> template<typename T> class foo<T*> {};<br /><br /> 明示的特殊化定義とクラス定義<br /> template<> class foo<int> {};<br /> class bar {};<br /><br /> 明示的特殊化宣言とクラス宣言<br /> template<> class foo<int>;<br /> class bar;<br /><br /> 実体化とクラスの使用<br /> foo<int> foo_instance;<br /> bar bar_instance;Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3636872937372639901.post-9244765744633673372015-10-30T12:36:46.438+09:002015-10-30T12:36:46.438+09:00ああ、<>で囲った部分が消えてます。
HTMLの文法を知らないので、適切に記述できません...ああ、<>で囲った部分が消えてます。<br />HTMLの文法を知らないので、適切に記述できません。<br />役に立たないコメントに成り下がってしまった。orzAnonymousnoreply@blogger.comtag:blogger.com,1999:blog-3636872937372639901.post-4563103341252064732015-10-30T12:31:33.653+09:002015-10-30T12:31:33.653+09:00こんなに古い記事にコメントするのもどうかと思うのですが、テンプレートについて学習している人がハマる可...こんなに古い記事にコメントするのもどうかと思うのですが、テンプレートについて学習している人がハマる可能性があるので、異なる意見を書きます。<br /><br />>また、特殊化とは、暗黙的に実体化(instantiation)されたものと、明示的に特殊化されたものとの総称である。<br /><br />私もおそらく多くの読者と同様、江添氏の多くの記事をたいへん参考にさせて頂き非常に感謝しています。<br />ただ、この記述だけは、テンプレートの理解に支障を来し、多少余分な時間がかかりました。<br /><br />プライマリー・テンプレート、部分的特殊化、特殊化はすべて「定義」です。<br />例示されているものは「宣言」なので定義がないですね。でも、別途定義が必要です。<br />しかし、実体化は定義ではなく、他のところで定義されたテンプレートを使うものです。<br /><br />実体化した時に使われる定義は、プライマリー・テンプレート、部分特殊化、特殊化のどれかが実体化で与えたテンプレート・パラメータによって選択されます。<br />例えば、特殊化定義をコメントアウトしても、相変わらず実体化でき、その時はプライマリー・テンプレートが選択されます。<br /><br />普通のクラスの対応するものと並べてみます。<br /><br /> プライマリー・テンプレート定義(これは当然ですが普通のクラスには対応するものはないです)<br /> template class foo {};<br /><br /> 部分特殊化テンプレート定義(これもテンプレートのままなので普通のクラスに対応しないです)<br /> template class foo {};<br /><br /> 明示的特殊化定義とクラス定義<br /> template<> class foo {};<br /> class bar {};<br /><br /> 明示的特殊化宣言とクラス宣言<br /> template<> class foo;<br /> class bar;<br /><br /> 実体化とクラスの使用<br /> foo foo_instance;<br /> bar bar_instance;<br /><br />クラスを「定義すること」と「使うこと」は全く異なりますね。<br />同様に特殊化テンプレートを定義することとそれを使う(実体化する)ことは全く異なります。<br /><br />>部分的特殊化とは、特殊化という名前が紛らわしいだけの別物である。<br /><br />江添氏の言うとおり、部分特殊化されたテンプレートはテンプレートで、特殊化されたテンプレートは既にテンプレートではないのにどちらもテンプレートっぽく感じるので紛らわしいですね。<br />テンプレートを特殊化したものは普通のクラスと事実上同じであることを知っていれば良いだけかも知れません。<br /><br />friend指定では相変わらずテンプレートとして含むことができるので、用語的には「右辺値参照」と同様ベストではないけど、ワーストではないし、より妥当な名称がないので許容するしかないって感じでしょうか?Anonymousnoreply@blogger.com