struct Foo{
MY_MACRO
};
를 작성하고 그것이 내가 MY_MACRO를 정의하려면 어떻게
struct Foo{
void bar(Foo&){}
};
으로 확장하고 싶지
?
이#define MY_MARCO(X) void bar(X&){}
struct Foo{
MY_MACRO(Foo)
};
이 매우 가깝게하지만 하위 이상적입니다, 내가 클래스 이름을 반복하지 않으과 같이
내가 가지고 올 수있는 유일한 물건은 다음과 같다.
불행하게도 다음은 컴파일되지 않습니다 :struct Foo{
void bar(decltype(*this)&){}
};
무엇에 대한 템플릿 –
일반적으로, 단지 ** ** 내가 한 번 실험 않았다하지 않는 " NON_COPYABLE "매크로를 사용하고 (1) 클래스 이름을 매크로 인수로 전달하고 (2)"THIS_CLASS "라는 매크로 정의에 의존하는 두 가지 솔루션을 사용해 보았습니다. 그러나 컴파일러가 특히 Visu al C++, 더 나은 해결책은 복사 불가능한 클래스에서 상속하는 것이 었습니다. –
[Curiously Recurring Template Pattern] (http://stackoverflow.com/questions/4173254/what-is-the-curiously-recurring-template-pattern-crtp)을 사용하는 것이 좋습니다. 매크로는 악합니다. –