2013-09-03 3 views
1

stl의 문자열 클래스 std::string을 사용했습니다. 이제는 eastl으로 모든 것을 바꾸려고합니다. 그래서 쉬운 질문 :암시 적으로 std :: string을 eastl :: string으로 변환합니다.

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

error: conversion from ‘the::string {aka std::basic_string}’ to non-scalar type ‘eastl::string {aka eastl::basic_string}’ requested

가이 유형 간의 변환을 자동화 할 수 있습니까?

+0

시도 eastl : 문자열 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의를 만들 수 있습니다 : : string ("test") .cstr()); –

+1

'std :: string'을 초기화하지 않는 오타가 있습니까? – Mahesh

+0

@Mahesh 예, 죄송합니다. 팁 고마워. – Ockonal

답변

1

아니요, eastl::stringstd::string에 대한 복사 생성자/할당 연산자가 정의되어 있지 않으면 아니요.

당신이 원하는 경우에 당신은 당신의 자신을 추가 할 수 있습니다

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

std::string의 내부 문자 배열에 대한 포인터를 얻기 위해 .c_str() 방법을 사용하는 것 인 eastl::stringstd::string에서 이동하는 가장 간단한 방법 라이브러리를 수정하십시오. 이 비록 아마 나쁜 생각

간단한 예 :

MyString ms = std::string("hello"); 
+0

변환에 대한 직접적인 지원은 없지만 모든 빌딩 블록을 가지고있다. 이것을 작동 시키려면 EASTL을 포크하고 수정할 필요가 없습니다. MOreover는 전문가 수준의 라이브러리 포크가 어떤 생성자인지 식별 ​​할 수 없었던 누군가에게 포크와 도로의 절망에 대한 제안이라고 제안합니다. –

+0

@ DavidRodríguez-dribeas 글을 쓰는 것은 아무런 문제가되지 않습니다. 이 변환 연산자를 const char *에 추가했는데 모든 것이 정상적으로 작동합니다. 질문은 더 좋아했습니다 : 원래 소스를 건드리지 않고 이것을하는 방법 :) ostream 글로벌 오퍼레이터와 같은 것. – Ockonal

+0

@Ockonal : 라이브러리를 포크하는 문제는 모든 업스트림 변경 사항이 코드베이스에 병합되어야한다는 것입니다. 라이브러리의 코드를 수정하는 것을 포함하지 않는 솔루션이 있습니다. 또한 표준 라이브러리에서 'const char *'로의 변환이 부족하다는 것은 의식적인 디자인 결정이라는 점에 유의하십시오. 변환을 고려할 때 다음을 기억하십시오. * 용이있을 것입니다. * –

0

이 클래스는 호환되지 않습니다. eastl :: string에는 std :: string 인수가있는 생성자가 없습니다. 그래서 다음과 같이 사용해야합니다 : srd :: string stlstr = "test"; eastl :: string eastlstr = strlstr.c_str();

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()); 
+0

mmm. 명백한 'eastl :: string (std_string.begin(), std_string.end())'옵션이 아닌가? – sehe

+0

@sehe : 많은 주목을받지는 못했지만, 'eastl :: basic_string'에는 템플릿 생성자가없는 것 같습니다. –

관련 문제