사소한 코드 내부에서 일부 클래스 메소드를 호출하는 함수를 인스턴스화해야한다고 가정합니다.const 한정자 변경으로 메소드 대체 (C++)
#include <iostream>
class A
{
public:
int f() { return 1; }
int g() { return 2; }
};
template <class T, int (T::*method)()>
int func(T& x)
{
// some complex code here calling method()
return (x.*method)();
}
int main()
{
A a;
std::cout << func<A, &A::f>(a) << "\n"
<< func<A, &A::g>(a) << "\n";
return 0;
}
이 코드는 컴파일되어 작동합니다. 이제 두 가지 방법이 같은 사실 CONST 및 const가 아닌 것을 가정 : 멤버 함수가 서로 다른 서명을 가지고 있기 때문에
class A
{
int val_;
public:
A() : val_(0) {}
int alloc() { return ++val_; }
int get() const { return val_; }
};
이 시간이 우리 때문에 const를 규정에 동일한 접근 방식을 사용할 수 없습니다. 문제를 런타임으로 옮기는 것은 아무 것도 해결하지 못하는 것입니다.이 상황에서 func()를 두 함수로 다시 작성하지 않는 방법이 있습니까?
'복잡한 코드'를 다른 곳에 캡슐화 할 수 있습니까? –