나는 현재 얻으려고 노력하고있는 컴파일하려면 다음(const를) 오버로드 된 메서드
class foo {
};
class bar {
public:
const foo & to_foo() const {
return f;
}
foo & to_foo() {
return f;
}
private:
foo f;
};
template< typename T, typename Enable = void >
class convert {};
template< typename T >
struct convert< T, typename std::enable_if< std::is_member_function_pointer< decltype(&T::to_foo) >::value >::type > {
static const foo & call1(const bar & b) {
return b.to_foo();
}
static foo & call2(bar & b) {
return b.to_foo();
}
};
그러나 그것은을 선택합니다, 그래서 두 가지 to_foo()
회원의 존재에 의해 혼동 전문화 GET의 기본 경우. to_foo()
멤버 중 하나를 제거하자마자 작동하지만, callX()
메서드 중 하나가 constness와 일치하지 않기 때문에 실패합니다.
이 경우이 기능을 감지 할 수있는 방법이 있습니까?
편집 : http://ideone.com/E6saX하여 방법 중 하나를 제거
, 그것은 잘 작동 : http://ideone.com/iBKoN는
그것은 당신이 여기 달성 하려는지 조금 불분명 : 참조하십시오. 'convert'의 사용법을 설명하면 문제를 해결하려는 현재의 시도에서 벗어나는 대신 달성하려는 것을 볼 수 있습니다. –
@MatthieuM .: 여러 유형을 처리하는 훨씬 더 복잡한 대규모 프레임 워크의 일부입니다. 일부 유형의 경우 전환을 사용하기 전에 전환이 필요합니다. 그러나이 변환 된 형식을 변환하는 방법을 검색하는 방법이 필요합니다. 입력 형식에 크게 의존하기 때문입니다. 주어진 코드는 이것의 작은 부분으로, 현재 작동하려고합니다. – LiKao