c ++从类隐式转换为char *

时间:2014-07-14 12:35:09

标签: c++ class implicit

我有这个c ++类。

class Dinosaur {
    public:
        Dinosaur();
        ...
    private:
        char* name_str_pointer;
        ...
}

我尝试使用从恐龙到char *的隐式转换,因此这行可以将" velociraptor" name_str_pointer 进行比较。

Dinosaur d();
strcmp(d, "velociraptor");

返回

error: cannot convert ‘const Dinosaur’ to ‘const char*’ for argument ‘1’ to ‘int strcmp(const char*, const char*)’

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:2)

尝试以下

class Dinosaur {
    public:
        Dinosaur();
        operator char *() const { return name_str_pointer; }
        ...
    private:
        char* name_str_pointer;
        //...
};

//...

Dinosaur d;
strcmp(d, "velociraptor");

考虑到你必须在默认构造函数中分配name_str_pointer指向的足够内存,以容纳字符串文字“velociraptor”。您还需要定义复制构造函数,复制赋值运算符和析构函数。无论如何,这种方法不安全

如果不使用指针和动态分配的内存而使用标准类std::string

,那会好得多

例如

class Dinosaur {
    public:
        Dinosaur( const std::string &name ) : name_str_pointer( name ) {}
        operator const std::string &() const { return name_str_pointer; } 
        ...
    private:
        std::string name_str_pointer;
        //...
};