C++模板打印对象名称

C++ template print object name

本文关键字:对象 打印 C++      更新时间:2023-10-16
template <class T>
class mytemp {
    public:
    mytemp ();
    print_name()
    {
     cout << "Name is: " << //?
    }
};
mytemp<int> myobject ();
myobject.print_name()

我希望 print_name() 函数打印此类的名称,在本例中,打印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:"