隐式转换为std :: string到eastl :: string

时间:2013-09-03 19:08:04

标签: c++ string stl

我正在使用来自stl std::string的字符串类,现在我想用eastl替换所有内容。这是一个简单的问题:

eastl::string obj = std::string("test");
  

错误:从':: string {aka std :: basic_string}'转换为   非标量类型'eastl :: string {aka eastl :: basic_string}'   请求的

是否可以在这些类型之间自动转换?

3 个答案:

答案 0 :(得分:2)

eastl::string obj1 = "test";             // works out of the box
eastl::string obj2 = std_string.c_str(); // equivalent to above
eastl::string obj3(&std_string[0],       // another option
                   &std_string[0]+std_string.size());

答案 1 :(得分:1)

不,如果eastl::string未为std::string定义复制构造函数/赋值运算符,则不会。

std::stringeastl::string的最简单方法是使用.c_str()方法获取指向std::string的内部字符数组的指针< / p>

std::string ss("hello");
eastl::string es = ss.c_str(); 

如果要修改库,可以添加自己的。 虽然这可能是一个坏主意

简单的例子:

class MyString {
    private:
        char *str;
    public:
        MyString(const std::string &s) {
            str = new char[s.length() + 1]; /* allocate */
            strcpy(this->str, s.c_str());   /* copy */
        }
        ~MyString() {
            delete [] str;
        }
};

然后你可以用:

创建一个新的MyString
MyString ms = std::string("hello");

答案 2 :(得分:0)

这些类不兼容。 eastl :: string没有带std :: string参数的构造函数。所以你应该使用这样的东西: srd :: string stlstr =“test”; eastl :: string eastlstr = strlstr.c_str();