2016-08-16 2 views
-3

영어 또는 프랑스어 단어를 음절 수로 분류하여 참조해야하는 C++ 클래스를 작성했습니다. 형식이 지정된 사전 파일은 언어에 따라 이름이 지정되며, 읽히고 나면 클래스의 영어와 프랑스어 기능은 같은 논리를 공유합니다.C++에서 파일 문자열을 함수로 전달하는 가장 좋은 방법은 무엇입니까?

는 모든 파일을 포함하는 디렉토리 생성자에 전달되는
//Files needed for English 
const char sSingleSyllablePath[] = "EN-SGL.txt"; 
const char sDoubleSyllablePath[] = "EN-DBL.txt"; 
const char sTripleSyllablePath[] = "EN-TRI.txt"; 
//... 

, 다음 파일 이름 문자열 초기화에서 참조 :

//Files needed for French 
const char sSingleSyllablePath[] = "FR-SGL.txt"; 
const char sDoubleSyllablePath[] = "FR-DBL.txt"; 
const char sTripleSyllablePath[] = "FR-TRI.txt"; 
//... 

배열은 다른 파일을 같은 이름을 가질 필요가 있지만, 참조 기능.

올바른 파일 이름 지정으로 이것을 호출하는 가장 좋은 방법은 무엇입니까? 동일한 코드이지만 이름이 다른 두 개의 클래스가있는 것은 쉽지만 효율적으로 보이지는 않습니다. 많은 필수 파일들이 있기 때문에, 생성자에서 커다란 매개 변수 목록을 가지고 있지 않은 것 같습니다. - 필요하면 어떤

std::string getLocalized(const std::string &loc, const std::string &filename) 
{ 
    return loc + filename; 
} 

이 별도의 기능 때문 만은 다음과 같습니다

const std::string sSingleSyllablePath = "-SGL.txt"; 
const std::string sDoubleSyllablePath = "-DBL.txt"; 
const std::string sTripleSyllablePath = "-TRI.txt"; 

는 다음과 같은 기능을 정의 할 수 있습니다

+0

언어 별 문자열 테이블에 링크되는 * locale * 개체를 빌드하십시오. –

+0

언어와 씰러 블 번호가 주어진 단일 함수로 파일 이름을 "구성"할 수 없습니까? –

답변

2

당신은 표준 : : 문자열을 사용할 수 있습니다 현지화 된 파일 이름을 만들기 전에 몇 가지 작업을 수행하십시오.

0

당신은 일정 데이터에 상수 포인터를 전달할 수 :

void My_Function(char const * const p_text); 

이것은 std::string를 사용하여 달리, 새로운 변수를 생성하지 않습니다.

자세히 알아 두어야 할 사항은 문자열을 static으로 선언하는 것이 좋습니다. 나는 static 키워드를 사용하여 컴파일러가 (문자열을 복사하는 대신) 문자열에 직접 액세스하는 코드를 내보낼 수 있음을 발견했다. 정적 문자열에 대한 포인터를 전달할 수 있습니다.