내 정적 라이브러리와이를 사용하는 프로젝트 각각에 대해 모듈 이름을 어떻게 든 정의해야합니다. 단순히 정적 멤버 초기화 중에이 값이 필요하므로정적 라이브러리의 인라인 함수는 사용자 프로젝트에서 같은 이름의 함수로 대체됩니다.
std::string const module_name = "my module";
으로 처리 할 수 없습니다. 정적 데이터 초기화 순서가 정의되어 있지 않으므로 변수을 사용하려고 시도하는 동안 변수를 초기화 할 수 없습니다. 이 문제를 해결하려면
나는 각 모듈에 대해inline std::string const& module_name()
{
static std::string const name = "my module";
return name;
}
을 정의했다. 그러나 모든 module_name()
호출이 부모 모듈에서 구현을 사용하도록 해결 되었기 때문에 (module_name()
은 항상 상위 실행 파일 프로젝트의 이름을 반환합니다)이 방법은 효과가 없습니다. 그리고 나는 왜 그런지 이해하지 못합니다. 이 인라인 함수는 정적 라이브러리에서 정의되고 사용되기 때문에 실제 모듈 이름을 캡처해야합니다. 이 함수가 컴파일러에 의해 인라인되지 않았기 때문입니까?
이 문제를 해결하기위한 권장 방법이 있습니까?
컴파일러 : 외부 링크와 VC++ 10
어때요 ... 네임 스페이스입니까? – Xeo
@Xeo : 명시 적으로'particular_ns :: module_name()'을 백 개 장소에서 지정할 필요가 없습니까? 또한 실수를 저지르는 것이 가능합니다. 복사/붙여 넣기. –
'module_name'을 from에서 호출하는 것이 아니라면, 특정 네임 스페이스에도 있어야합니다. – Xeo