Как получить имя объекта класса?

 

Здравствуйте, подскажите пожалуйста, как получить имя объекта класса, с которым сейчас работаю?

Демонстрация вопроса в коде:

class myClass {
 public:
   void              PrintObjectName() {
      Print("How do I know this object name /?");
   }
};

void OnStart() {
   myClass a, b, c;

   a.PrintObjectName();
   b.PrintObjectName();
   c.PrintObjectName();
}

Очень не хватает для упрощения отладки кода, чтобы понимать, в каком именно из созданных объектов происходит ошибка

Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new
Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new
  • www.mql5.com
Оператор создания объекта new - Операторы - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Создавайте имя объекта через макрос.
 
yar.forex:

Здравствуйте, подскажите пожалуйста, как получить имя объекта класса, с которым сейчас работаю?

Демонстрация вопроса в коде:

Очень не хватает для упрощения отладки кода, чтобы понимать, в каком именно из созданных объектов происходит ошибка

Никак!

 
yar.forex:

Здравствуйте, подскажите пожалуйста, как получить имя объекта класса, с которым сейчас работаю?

Демонстрация вопроса в коде:

Очень не хватает для упрощения отладки кода, чтобы понимать, в каком именно из созданных объектов происходит ошибка

Самостоятельно:

class myClass {
 protected:
   string m;
 public:
   myClass(string n){
      m=n;
   }
   void              PrintObjectName() {
      Print("How do I know this object name ",m);
   }
};

void OnStart() {
   myClass a("a"), b("b"), c("c");

   a.PrintObjectName();
   b.PrintObjectName();
   c.PrintObjectName();
}

А если только для отладки нужно как-то различать объекты, вот так можно:

Print("How do I know this object name ",GetPointer(this));
 
Dmitry Fedoseev #:

Самостоятельно:

Понял, спасибо

 

Для вывода информации всегда используйте

PrintFormat("%s / %s", __FUNCTION__, tratata);
 
yar.forex:

Здравствуйте, подскажите пожалуйста, как получить имя объекта класса, с которым сейчас работаю?

Демонстрация вопроса в коде:

Очень не хватает для упрощения отладки кода, чтобы понимать, в каком именно из созданных объектов происходит ошибка


Если требуется получить имя класса, то через typename(this):

class myClass {
 public:
   void              PrintObjectName() {
	Print("How do I know this object name ",typename(this));
   }
};

void OnStart() {
   myClass a, b, c;

   a.PrintObjectName();
   b.PrintObjectName();
   c.PrintObjectName();
}
 
fxsaber #:
Создавайте имя объекта через макрос.
class DebugClass
{
private:
  const string Name;
  
public:
  DebugClass( const string &sStr ) : Name(sStr)
  {
  }
  
  string MyName( void ) const
  {
    return(this.Name);
  }
};

class MyClass : public DebugClass
{
public:
  MyClass( const string sStr = NULL ) : DebugClass(sStr)
  {
  }
};

#define DEFINE(A, B) A B(#B)

void OnStart()
{
  DEFINE(MyClass, a);
  DEFINE(MyClass, b);
  DEFINE(MyClass, c);
  
  Print(a.MyName());
  Print(b.MyName());
  Print(c.MyName());
}
Причина обращения: