2014-11-18 1 views
4

비 멤버 함수로서 클래스 정의 외부에서 한 유형에서 다른 유형으로 형변환 연산자를 정의 할 수 있습니까? 나는 다른 연산자가 operator-와 같은 것이 가능하다는 것을 알고 있지만 cast 연산자는 불가능합니다. 두 클래스 A와 B에 대한 예를 들어, 내가는 A의 외부 캐스팅 연산자를 정의하기 위해 노력하고 B는 다음과 범위 같이 그들은 당신의 정의 유형을 변환 할 수있는 수단을 제공 즉변환 함수를 비 멤버 함수로 사용할 수 있습니까

operator A(const B& b) 
{ 
    A a(....); 
    return a; 
} 

답변

6

아니요, 변환 함수는 멤버 함수 여야합니다. C++ 11

[class.conv.fct]/1

멤버 함수 클래스 X 형태의 이름의 변수가없는의 [operator전환 형 -id]은 X에서 conversion-type-id으로 지정된 유형으로의 변환을 지정합니다. 이러한 기능을 변환 기능이라고합니다.

다른 변환 기능은 없으며 특히 비 멤버 변환 기능은 없습니다.

+0

하지만 구조체에서 캐스팅 연산자를 정의했습니다! 제 말은, 당신이 'operator int() const; 구조체에서 struct 범위 밖의 함수를 작성하여 구조체를 int로 캐스트 할 수 있습니까? – mmostajab

0

변환 연산자 클래스에 고유 한 다른 유형으로. 예컨대위한

: - - :

여기
class Rational 
{ 
    public: 
    operator double(); 
}; 

연산자를 두 번하여 Rational 객체가 두 배로 변환하는 수단을 제공 그래서 그들은 목적을 봉사하는 클래스의 회원이어야합니다.

+0

내 문제는 그 클래스에 액세스 할 수 없다는 것과 하나의 클래스에서 다른 클래스로 하나의 개체를 가져야한다는 것입니다. 클래스 범위 밖에서 캐스터 함수를 직접 작성하는 방법이 있습니까? – mmostajab

+0

그것이 변환 함수가 클래스의 멤버 여야한다고 말한 것입니다. 즉, 비회원 함수로 정의 할 수 없습니다. – ravi

+0

@Mortezamostajab 어쨌든 암시 적 변환을 피하고 명시 적 변환 함수를 작성하는 것이 좋습니다. 암시 적 변환은 피할 수있는 것보다 많은 버그를 유발합니다. – molbdnilo

관련 문제