LINUX.ORG.RU

История изменений

Исправление victor79, (текущая версия) :

Чуть погодя пришло такое решение на ум:

int& global_counter() {
   static int r = 0;
   return r;
}

template <class T>
int global_template_ident() {
   static int r = ++global_counter();
   return r;
}

позже получать его в базовом через виртуальный метод и проверять

   template <class T>
   struct B : public A {
      int template_ident() override {
          return global_template_ident<T>() }
   };

   ...
   A* r = ...;
   assert( r->template_ident() == global_template_ident<T>() );

Есть ли у такого метода недостатки или что другое будет лучше?

Исходная версия victor79, :

Чуть погодя пришло такое решение на ум:

int& global_counter() {
   static int r = 0;
   return r;
}

template <class T>
int global_template_ident() {
   static int r = ++global_counter();
   return r;
}

позже получать его в базовом через виртуальный метод и проверять

   template <class T>
   struct B {
      int template_ident() override {
          return global_template_ident<T>() }
   };

   ...
   A* r = ...;
   assert( r->template_ident() == global_template_ident<T>() );

Есть ли у такого метода недостатки или что другое будет лучше?