내가 레지스트리 클래스 공장 함수를 등록하는 모듈 수준의 함수 호출을 사용하고 있습니다 :G ++ 4.9 - 모듈 범위에서 함수를 호출하지 않습니까?
static Controller * ctor(Device * device, const char *) { return new NullController(device); }
static int s_id = DeviceRegistry::RegisterControllerClass("null", ctor);
//------------------------------------------------------------------------------
NullController::NullController(Device * device)
: Controller(device, "null", s_id)
{
}
경우 예 : DEV :: DeviceRegistry :: RegisterControllerClass는()입니다 네임 스페이스의 예에서 무료 기능 DEV. 이것은 Visual Studio에서 잘 작동하지만 GCC/Linux에서 실행될 때 코드가 호출되지 않는 것처럼 보입니다. RegisterControllerClass()를 중단하면 호출되지 않습니다. 컴파일러가 s_id 필드를 최적화하는 경우에 대비하여 기본 클래스를 생성하는 데 사용했습니다. 그래서 그게 아니라고 확신합니다. 이 코드의 문제점은 무엇입니까?
번역 단위가 링크되어 있는지 확인해야합니다. 한 가지 방법은'main'에서 함수를 호출하는 것입니다. –
모듈 스코프 란 무엇입니까? – NathanOliver
번역 단위 (즉, cpp 파일 + 포함 헤더) 내에 있습니다. 그들이 '정적'으로 표시되지 않았다면 '글로벌'이라고 말했을 것입니다. –