2016-07-03 3 views
1

헤더 파일을 변경해야만 변경할 수있는 C++ 코드가 있습니다. 나는 코드를 가지고 그것을 컴파일 할 수있다.C++ 매크로 정의 도트 포함?

문제는 (내가하고 싶은 무슨 종류의 관계가 함수 포인터) 나는이 같은 함수 포인터 정의 뭔가를해야한다는 것입니다 :

foo.bar(); 

나는 변화를하고자하는 매크로 나 뭔가 그 :

#define foo.bar() FunCall() 

제가 이해하는 한 문제는 매크로에서 도트를 사용할 수 없다는 것입니다. 다른 방법이 있습니까?

편집 :

좀 더 자세한 정보. 내가 얻는 코드는 단일 인스턴스를 실행하기위한 것이지만 클래스에 여러 인스턴스를 실행하기 위해 코드를 래핑하고 있습니다. 그게 내가 끝내려고 노력하고있는 두통을 준다.

내가 노력하고있어 것은 어느 매크로 및 일부 인라인 함수 또는 전체 세 번째 방법 사용하기 :

void class::function() 
{ 
    EventFuncTypedef f = foo.bar; 
    (this->*f)(); 
} 

: 나는 동등 이상으로 할 수있는 몇 가지 코드가 필요

void function() 
{ 
    foo.bar(); 
} 

을 또는

void class::function() 
{ 
    class::FunCall(); 
} 

위의 코드는 모두 원점에서 실행되는 옵션 1 또는 2를 시도하는 것입니다. 알 코드. 매크로와 도우미와

+1

는 FunCall'로 구현 기능'바()'()'와'struct'을 확인하고 전역 변수'foo'을 만들 수 있습니다. 그러면'foo.bar()'는'FunCall()'에 대한 함수 호출이됩니다. 괜찮습니까? – Mine

+2

점을 없앨 수는 없습니다. 당신은 다소 창의적인 방법으로 만 그것을 사용할 수 있습니다. –

+0

엄격한 것은 불가능합니다. 실제로 이미 존재하는 것입니다. 내가 얻는 코드는 단일 인스턴스로 실행되도록 작성되었으며 여러 인스턴스의 클래스에 전체 코드를 래핑하려고합니다. 그것은 멤버 함수 포인터로 복잡합니다. 나는 새로운 창조적 인 방법으로 그것을 감싸려고 생각하고있다. – ThomasG

답변

0

:

struct FunCaller { 
    static auto bar() {FunCall();} 
}; 

#define foo FunCaller{} 
+0

죄송합니다. 수업에 모두 포장했음을 언급하지 않았습니다. 하지만 어쩌면 여전히 작동할까요? 위의 결과를 예측할 수는 없지만 비슷한 결과를 시도 할 것입니다. – ThomasG

+0

이것이 유용 할만큼 일반화 될 수 있을지는 의문입니다 ... –