라이브러리가 구현시 C ++ 11 만 사용하고 C ++ 11 기능 또는 유형을 공개적으로 노출시키지 않는 경우, 특히 정적 링크를 사용하는 경우 가능하며 표준입니다.
라이브러리가 C- 레벨 인터페이스를 노출하지만 (다양한 클라이언트가 사용할 수 있음) C ++로 내부적으로 구현되는 일반적인 경우를 고려하십시오. 이러한 라이브러리에 연결하는 클라이언트는 공용 바이너리 API (내 보낸 함수)에 대해서만 걱정하면되며, 호환성을 극대화하기 위해 레거시 C / C ++로 제한됩니다. Java 프로그램은 내부적으로 C ++로 구현 된 C 레벨 API에 링크 할 수 있습니다. 그렇다고 Java가 "C ++"을 지원해야한다는 의미는 아닙니다. 마찬가지로 구식 C / C ++ 클라이언트는 내부적으로 C ++ 라이브러리 또는 다른 라이브러리의 일부 전위 버전을 사용하는 C 레벨 또는 C ++ 레벨 API에 연결할 수 있습니다. 라이브러리 인터페이스에 연결하는 데 필요한 것과 라이브러리 자체가 내부적으로 연결되는 (또는 정적으로 가져 오는) 두 가지가 있습니다.
라이브러리의 클라이언트를 구현의 종속성에 노출시키지 않습니다.
의존성 (C ++ 11 또는 다른 것)을 라이브러리에 정적으로 링크 할 수 있다면 깨끗하고 독립적입니다. 이 라이브러리는 바이트 코드 만있는 진정한 블랙 박스입니다. 그러나 라이브러리가 "암시 적 동적"링크 (명시 적 LoadLibrary / GetProcAddress 종류 및 * nix 및 OS X의 유사한 메소드와 혼동하지 않아야 함)를 통해 종속성에 링크 된 경우에도 이전 클라이언트는 여전히 해당 라이브러리의 링크에 연결할 수 있어야합니다. 공용 인터페이스는, 그들이 라이브러리에 링크 할 수 없습니다 경우에도 라이브러리에 따라 다릅니다 .