我正在使用来自stl std::string
的字符串类,现在我想用eastl替换所有内容。这是一个简单的问题:
eastl::string obj = std::string("test");
错误:从':: string {aka std :: basic_string}'转换为 非标量类型'eastl :: string {aka eastl :: basic_string}' 请求的
是否可以在这些类型之间自动转换?
答案 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::string
到eastl::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;
}
};
然后你可以用:
创建一个新的MyStringMyString ms = std::string("hello");
答案 2 :(得分:0)
这些类不兼容。 eastl :: string没有带std :: string参数的构造函数。所以你应该使用这样的东西: srd :: string stlstr =“test”; eastl :: string eastlstr = strlstr.c_str();