2012-03-20 9 views
0

での友情のような、友人のクラスにテンプレートを作成することが可能ですホスト・メンバーにアクセスするためのポリシー・クラス。 (...今私はこれが私のデザインが単に悪いと思うかもしれないと思い始めます...)テンプレート化C++

ありがとうございました!

+2

使用方法[CRTP](http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern) –

+0

TとMyClassに共通の基底クラスがある場合、CRTPは素晴らしいソリューションだと思います! –

+3

それは今[許可されて](http://stackoverflow.com/questions/6510041/template-parameter-as-a-friend) – Lol4t0

答えて

4

C++ 03では、テンプレートの引数に友情関係を宣言することはできません。

§7.1.5.3/ 2 [...]識別子はtypedef-名またはテンプレートの型パラメータに解決する場合、詳述型指定子が悪い形成されています。 [注:このテンプレート型パラメータTを持つクラステンプレート、宣言

 friend class T; 

内悪い形成される、ことを意味します。 ]

C++ 11では、この点でいくつかの変更がありましたが、少し奇妙です。 friend class T;は依然として不正ですが、friend Tは許可されています。引用符は、同じ段落に見出すことができる:

§7.1.5.3/ 2

[...] [注:これは、テンプレート型パラメータTを持つクラステンプレート内、ことを意味し、宣言

friend class T; 

が悪い形成されています。しかし、同様の宣言友人T;許可される(11.3)。 - 最後の注釈]

注記は規範的ではありませんが、周囲の規範の意図を示しています。私はノートを正しいものにする特定の文を見つけることができませんでしたが、私はそれが許容されるべきであるということを少なくともという意味でと仮定します。

+0

本当に奇妙ですが、私の場合は実用的です:) Davidに感謝します。 – Shnippoo

関連する問題