무작위 질문의 종류 ...클래스 연산자로만 캐스트 할 수있는 방법은 무엇입니까?
내가 찾고있는 것은 내가 캐스팅하는 클래스 인스턴스의 정의 된 연산자를 사용하는 캐스트 연산을 표현하고 컴파일 타임 오류를 생성합니다. 유형에 대해 정의 된 형변환 연산자가없는 경우.
template< typename RESULT_TYPE, typename INPUT_TYPE >
RESULT_TYPE operator_cast(const INPUT_TYPE& tValue)
{
return tValue.operator RESULT_TYPE();
}
// Should work...
CString sString;
LPCTSTR pcszString = operator_cast<LPCTSTR>(sString);
// Should fail...
int iValue = 42;
DWORD dwValue = operator_cast<DWORD>(iValue);
재미있는 측면 참고 : 그래서, 예를 들어, 내가 무엇을 찾고있어 같은입니다 위의 코드는 VS2005 C++ 컴파일러를 충돌, 인해에 VS2008 C++ 컴파일러에서 제대로 컴파일되지 않는 것 나는 컴파일러 버그라고 생각하지만, 그 아이디어를 잘 보여줄 것이다.
아무도이 효과를 얻으려면 어떤 방법을 알고 있습니까?
편집 : 이유가 무엇인지 설명해주십시오. 형식을 캡슐화하거나 추상화해야하는 래퍼 클래스가 있고이를 캡슐화 된 형식으로 캐스팅한다고 가정합니다. static_cast <>을 사용할 수는 있지만 실패 (예 : 컴파일러가 요청한 유형으로 변환 할 수있는 연산자를 선택합니다. 연산자가 없기 때문에 오류를 원할 때).
틀림없이 그렇긴하지만 필자가 컴파일러에서 캡슐화 된 함수로 수행하고자하는 것을 정확히 표현할 수 없다는 것은 짜증 스럽다.
두 가지 예를 들어 템플릿을 사용해 보았습니까? VS2008은 템플릿 자체를 컴파일해도 잘 작동 할 것입니다. – Nick
방금 해 보았는데 솔루션이 잘 작동하는 것 같습니다. 내가 VS2005에 내장 된 형식에 대한 초기 typedef에 대한 컴파일러 오류가 발생했습니다. 좋은 생각. :) – Nick