template <class T>
class mytemp {
public:
mytemp ();
print_name()
{
cout << "Name is: " << //?
}
};
mytemp<int> myobject ();
myobject.print_name()
Я хочу, чтобы функция print_name() печатала это имя класса, в этом примере print Name is: myobject
.
Как я могу это сделать?
Вам нужно будет добавить переменную-член, содержащую имя объекта.
Я собираюсь предположить, что вы захотите сделать эту переменную 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:"