C에서 객체 지향 코드를 작성할 때 일반적으로 구조체 정의를 공용 함수와 함께 헤더 파일에 넣고 공용 함수를 별도의 .c 파일로 구현합니다. 이 클래스에 대해 "private"인 모든 함수에 static 키워드를 제공하고 .c 파일에서도 정적 키워드를 구현합니다. 그런 다음 공용 함수는 동일한 클래스에 속한 개인 함수를 호출 할 수 있습니다. static 함수를 사용하면 private 함수를 외부에서 호출 할 수 없기 때문에 GCC는 이러한 함수를 최적화 할 수 있습니다. 이들은 종종 인라인되고 원래 함수는 출력 개체 파일에서 완전히 삭제됩니다.C++ 개인 함수의 내부 연결?
이제 내 질문에 : 어떻게 C++ 클래스를 사용하여 동일한 작업을 수행 할 수 있습니까?
의 내가 헤더 파일이 있다고 가정 해 봅시다 :
class A {
int private_field;
int private_function();
public:
int public_function();
};
그리고 내 .cpp 파일 :
#include <iostream>
#include "A.h"
int A::private_function() {
std::cin >> private_field;
return private_field;
}
int A::public_function() {
return private_function() + 4;
}
결과 객체 파일에서를 private_function은 별도의 상징으로 남아 있으며, public_function는 private_function를 호출 (인라인되지 않음). private_function 내부 연결을 제공하고 싶습니다. 따라서 컴파일러가 C를 사용할 때와 동일한 최적화 작업을 수행 할 수 있습니다. 익명의 네임 스페이스와 정적을 사용하여 시도했지만 원하는대로 작동하지 못합니다. 올바르게 수행하는 방법, 가능합니까? 나는 GCC를 사용한다.
"익명의 네임 스페이스와 정적으로 시도했지만 제대로 작동하지 않습니다." 뭐가 잘못 됐어? –
귀하의 질문에 대답했지만 컴파일러는 내부 연결이 필요하지 않도록 인라인하는 것과 같은 대부분의 최적화를 수행 할 수 있어야합니다. –
인라인은 때때로 (작은 기능의 경우) 수행되지만 원본은 항상 더 큰 라이브러리 크기로 유지됩니다. – Emil