дружественный шаблонный класс

Тема в разделе "LANGS.C", создана пользователем cupuyc, 18 май 2010.

  1. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    есть 2 класса.
    Код (Text):
    1. template <int x>
    2. class Cx
    3. {
    4. };
    5.  
    6. class Ca
    7. {
    8. };
    класс Cx нужно объявить дружественным классу Ca для любых шаблонных параметров x. так не проходит:
    Код (Text):
    1. class Ca
    2. {
    3.   friend Cx;
    4. };
     
  2. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    Во!
    Код (Text):
    1. template <int x>
    2. class Cx
    3. {
    4. };
    5.  
    6. class Ca
    7. {
    8.   template<int x> friend class Cx;
    9. };
    Поспешил. Нужно было сперва MSDN почитать:
    Код (Text):
    1. // c3772.cpp
    2. // compile with: /c
    3.  
    4. // A class template.
    5.     template<class T> class A {};
    6.  
    7. // A partial specialization of the class template.
    8.     template<class T> class A<T*> {};
    9.  
    10. // An explicit specialization.
    11.     template<> class A<char>;
    12.  
    13. class X {
    14. // Invalid declaration of a friend of a partial specialization.
    15.     template<class T> friend class A<T*>; // C3772
    16.  
    17. // Instead, if it is appropriate for your application, declare a
    18. // friend of the class template. Consequently, all specializations
    19. // of the class template are friends:
    20. //    template<class T> friend class A;
    21. // Or declare a friend of a particular partial specialization:
    22. //    friend class A<int*>;
    23. // Or declare a friend of a particular explicit specialization:
    24. //    friend class A<char>;
    25. };