C ++模板打印对象名称

时间:2014-11-18 23:39:24

标签: c++ templates

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 个答案:

答案 0 :(得分: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:"