Есть ли несоответствие стандарту?
От: Аноним  
Дата: 11.09.05 16:44
Оценка:
Есть такой способ регистрации. Везде ли он должен работать?
template<class T>
class AAAA {

  struct helper {

    helper(){std::cout<<"+"<<typeid(T).name()<<"\n";}//Необязательный конструктор

    virtual~helper(){

      AAAA<T>::registrator;//В любой виртуальной функции упомяните регистратор

      std::cout<<"-"<<typeid(T).name()<<"\n";
    }
  };

  static helper registrator;
};

template<class T>//Это тоже необходимо
typename AAAA<T>::helper AAAA<T>::registrator;

//Теперь любое инстанцирование AAAA<T> создаёт регистратор

template AAAA<int>;//Можно так

class your_class : AAAA<your_class>{};//или так


Не забывайте, пожалуйста, использовать теги [c]...[/c], [code]...[/code] и т.п. для выделения фрагментов кода. -- ПК
Re: Есть ли несоответствие стандарту?
От: Павел Кузнецов  
Дата: 12.09.05 04:34
Оценка:
> Есть такой способ регистрации. Везде ли он должен работать?
>
> template<class T>
> class AAAA {
>   struct helper {
>     helper(){std::cout<<"+"<<typeid(T).name()<<"\n";}//Необязательный конструктор
>
>     virtual~helper(){
>       AAAA<T>::registrator;//В любой виртуальной функции упомяните регистратор
>       std::cout<<"-"<<typeid(T).name()<<"\n";
>     }
>   };
>
>   static helper registrator;
> };
>
> template<class T>//Это тоже необходимо
> typename AAAA<T>::helper AAAA<T>::registrator;
>
> //Теперь любое инстанцирование AAAA<T> создаёт регистратор
>
> template AAAA<int>;//Можно так
>


Это должно работать.

>
> class your_class : AAAA<your_class>{};//или так
>


А это может и не работать
Автор: afkos
Дата: 04.09.05
.
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[2]: Есть ли несоответствие стандарту?
От: Dmi_3 Россия  
Дата: 08.10.05 08:57
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

>> template AAAA<int>;//Можно так


ПК>Это должно работать.


>>
>> class your_class : AAAA<your_class>{};//или так
>>


ПК>А это может и не работать.


Хотелось бы получить ссылки на стандарт или хотя бы названия компиляторов где это не работает.
Насколько я знаю, если конструктор глобального\статического объекта имеет побочные действия то объект обязан быть создан.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.