pimpl 관용구를 사용할 때 모든 메서드 정의를 클래스 정의 안에 넣는 것이 좋은 생각입니까?클래스 정의에 모든 메서드 넣기
// in A.h
class A {
class impl;
boost::scoped_ptr<impl> pimpl;
public:
A();
int foo();
}
// in A.cpp
class A::impl {
// method defined in class
int foo() {
return 42;
}
// as opposed to only declaring the method, and defining elsewhere:
float bar();
};
A::A() : pimpl(new impl) { }
int A::foo() {
return pimpl->foo();
}
는 지금까지 내가 아는 한, 클래스 정의 내부의 메서드 정의를 가하고있는 유일한 문제는 (1) 구현 클래스 정의 및 을 포함 파일에서 볼 수 있다는 점이다 (2 : 예를 들어,) 컴파일러는 메소드를 인라인으로 만들 수 있습니다.
클래스가 개인 파일에 정의되어 있고 메서드가 한 곳에서만 호출되므로 인라인은 아무 효과가 없으므로이 경우 문제가되지 않습니다.
클래스 내부에 정의를 넣는 장점은 메서드 서명을 반복 할 필요가 없다는 것입니다.
그래, 괜찮습니까? 알고 있어야 할 다른 문제가 있습니까?
__private__ 파일이란 무엇입니까? – ezpz
@ezpz : 그건 C++ 개념이 아닙니다. 이는 클래스의 사용자가 #include하지 않은 파일이므로 구현 변경이 파일에 영향을주지 않습니다. – Amnon
이것은 정확하게 내가 해왔 던 것입니다. 나에게이 방법은 잘 작동했다. –