C ++ шаблон печати имени объекта

0
template <class T>
class mytemp {
    public:
    mytemp ();
    print_name()
    {
     cout << "Name is: " << //?
    }
};

mytemp<int> myobject ();
myobject.print_name()

Я хочу, чтобы функция print_name() печатала это имя класса, в этом примере print Name is: myobject.

Как я могу это сделать?

  • 1
    У объектов нет имен, у переменных есть. И не все объекты соответствуют переменным. В любом случае, это невозможно без передачи имени в качестве аргумента.
  • 1
    Похоже, это проблема XY . Какова конечная цель?
Показать ещё 4 комментария
Теги:
templates

1 ответ

0

Вам нужно будет добавить переменную-член, содержащую имя объекта.

Я собираюсь предположить, что вы захотите сделать эту переменную const. Если так, вы бы сделали что-то вроде этого:

#define CREATE_MYTEMP(x) mytemp<void> (x){#x}

template <class T>
class mytemp {
    private:
    string _name;
    public:
    mytemp(){}
    mytemp(string name) : _name(name){}
    void print_name() const
    {
        cout << "Name is: " << _name << endl;
    }
};

Чтобы использовать это, вам нужно будет передать имя при построении объекта или использовать CREATE_MYTEMP:

mytemp<void> foo("foo");
CREATE_MYTEMP(bar);

foo.print_name(); //prints: "Name is: foo"
bar.print_name(); //prints: "Name is: bar"

Если вы используете стандартный ctor, у вас будет пустое имя:

mytemp<void> empty;
empty.print_name(); //prints: "Name is:"

Ещё вопросы

Сообщество Overcoder
Наверх
Меню