Как это написать на ++

Тема в разделе "LANGS.C", создана пользователем green5, 30 сен 2011.

  1. green5

    green5 New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2006
    Сообщения:
    29
    Адрес:
    Protvino
    Код (Text):
    1. #include <iostream>
    2.  
    3. using namespace std;
    4.  
    5. template<typename S> struct B
    6. {
    7.   static int x_;
    8.   void plog()
    9.   {
    10.     clog << "xaxa\n";
    11.   }
    12. };
    13.  
    14. struct A : B<A>
    15. {
    16.   void plog()
    17.   {
    18.     if(x_) B::plog();
    19.   }
    20. };
    21.  
    22. //template<> int B<A>::x_; // what it means?
    23. int B<A>::x_; //  g++: error: specializing member ‘B<A>::x_’ requires ‘template<>’ syntax
    24.  
    25. int main()
    26. {
    27.   A::x_ = 1;
    28.   A a;
    29.   a.plog();
    30.   return 0;
    31. }
     
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    Код (Text):
    1. //template<> int B<A>::x_; // what it means?
    специализация шаблона...

    Код (Text):
    1. //  g++: error: specializing member ‘B<A>::x_’ requires ‘template<>’ syntax
    и в чем вопрос?
     
  3. green5

    green5 New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2006
    Сообщения:
    29
    Адрес:
    Protvino
    Да как эту x_ определить?
     
  4. Psionic

    Psionic Member

    Публикаций:
    0
    Регистрация:
    25 сен 2008
    Сообщения:
    156
    хмм, поробуйте вот так
    Код (Text):
    1. static int B<>::x_;
    или
    Код (Text):
    1. static int B::x_;
    этот статик будет един для всех вариантов класса независимо от того какой шаблон компилятор заменил типом, тоесть х_ будет единым и для B<double> и для B<int> и для B<A>, ибо если статик значит это в одном экземпляре и по одному адресу.
     
  5. green5

    green5 New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2006
    Сообщения:
    29
    Адрес:
    Protvino
    Затупил, просто
    Код (Text):
    1. template<> int B<A>::x_ = 0;
     
  6. green5

    green5 New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2006
    Сообщения:
    29
    Адрес:
    Protvino
    Спс кто ответил,
    Psionic, этот статик различен для разных классов (в g++).