C 및 C++에서 다른 API를 구현하기 위해 노력하고 있으며 프레임 워크에서 문자열을 받거나 다시 전달할 때 인코딩 오류가 발생하는 것을 피하기 위해 어떤 기술을 사용할 수 있는지 궁금합니다. 예를 들어 고객이 번역에 영향을 미치기 위해 구현할 수있는 C++의 간단한 플러그인 API를 상상해보십시오. 다음과 같은 함수가있을 수 있습니다 :C/C++ API에서 문자열의 혼란을 인코딩하지 않으려면 어떻게해야합니까?
const char *getTranslatedWord(const char *englishWord);
자, 모든 문자열이 UTF-8로 전달되도록하고 싶다고 가정 해 봅시다. 물론 필자는이 요구 사항을 문서화 하겠지만, 컴파일러에서 올바른 인코딩을 적용하고 싶을 것입니다. 아니면 전용 유형을 사용하는 것이 좋습니다. 예를 들어,이 같은 :
class Word {
public:
static Word fromUtf8(const char *data) { return Word(data); }
const char *toUtf8() { return m_data; }
private:
Word(const char *data) : m_data(data) { }
const char *m_data;
};
나는 이제 API에이 특수 유형을 사용할 수 있습니다
Word getTranslatedWord(const Word &englishWord);
불행히도, 이것은 매우 비효율적 쉽게 만들 수 있습니다. Word
클래스에는 적절한 복사 생성자, 할당 연산자 등이 부족합니다. 가능한 한 많은 불필요한 데이터 복사를 피하고 싶습니다. 또한 Word
이 점점 더 많은 유틸리티 함수 (예 : length
또는 fromLatin1
또는 substr
등)로 확장되는 위험이 있음을 알았습니다. 또 다른 String 클래스를 작성하지 않을 것입니다. 우연한 인코딩 믹스를 피하는 작은 컨테이너가 필요합니다.
다른 사람이이 경험이 있으며 유용한 기술을 공유 할 수 있는지 궁금합니다.
EDIT : 필자의 특별한 경우 API는 Windows의 경우 MSVC 6 - MSVC 10을 사용하고 Linux의 경우 gcc 3 & 4를 사용합니다.
어떤 OS입니까? 무슨 컴파일러? –
@ 앤더스 : 귀하의 의견에 답변하기 위해 제 질문을 업데이트했습니다. –