네트워크 클라이언트와 서버 모두에서 작업을 관리하기위한 코드가 있습니다. 그러나 여기 저기에 클라이언트 또는 서버에 의해 독점적으로 호출되는 몇 가지 함수가 있으며 실수로 서버에서 클라이언트 함수를 호출하는 경우 (또는 그 반대로) 중요한 버그 소스입니다.C++의 파생 함수에 코드를 자동으로 추가하는 방법
이러한 종류의 프로그래밍 오류를 줄이기 위해 함수에 태그를 지정하여 오용 된 경우 일괄 처리를 발생 시키려고합니다. 내 현재 솔루션은 클라이언트 또는 서버가 구성원에게 액세스해서는 안되는 경우 각각의 함수를 시작할 때 간단한 매크로로 어설 션을 호출합니다. 그러나 이것은 클래스의 파생 인스턴스가 여러 개있을 때 문제가 발생합니다. 모든 자식 클래스에서 클라이언트 또는 서버 측 구현에 태그를 지정해야합니다.
기본 클래스의 가상 멤버의 서명에 태그를 추가하면 태그를 한 번만 넣고 반복적으로 잊어 버려서 오류가 발생하지 않게 할 수 있습니다. 나는 기본 클래스 구현에 체크를 넣은 다음 base :: functionName과 같은 것으로 참조했지만, 모든 구현에 함수 호출을 수동으로 추가해야하는만큼 동일한 문제가 발생합니다. 이상적으로, 기본 생성자처럼 자동으로 호출되는 부모 버전의 함수를 가질 수 있습니다.
누구나 C++에서 이와 같은 것을 달성하는 방법을 알고 있습니까? 고려해야 할 다른 방법이 있습니까?
감사합니다. 다음 Base::doit()
의 구현은 그것이 적절한 환경에서 호출되는 것 있는지 확인하기 위해 검사를 할 수
class Base {
public:
void doit(const Something &);
protected:
virtual void real_doit(const Something &);
};
class Derived: public Base {
protected:
virtual void real_doit(const Something &);
};
및 :
서버/클라이언트에 대해 다른 코드 및/또는 클래스가 있어야하는 것처럼 들립니다. – Falmarri
일반 코드를 기본 클래스로 제외하고 서버 클래스와 클라이언트 클래스를 파생시키는 것이 왜 좋을까요? – Puppy