2013-01-04 7 views
0

C++에서 간단한 유형에 대한 기본 래퍼 클래스를 만들고 싶습니다. 당신이 할 수 있어야하는 것처럼 기본 타입으로부터 상속받을 수 없으므로, 나는 래퍼 클래스를 사용하고있다. 문제는 해당 유형이 완전히 유효 할 것이므로 해당 유형으로 직접 형변환 할 수 있기를 원합니다. 컴파일러는 단지 당신을 내버려 두지 않으며 성능을 떨어 뜨리는 캐스트 메서드를 실행하지 않고도 괜찮다고 말할 수있는 방법을 찾을 수 없습니다. 이 일을 할 수있는 방법이 있습니까?C++ 기본 유형 래퍼

class Integer32 
{ 
    public: 
    Integer32(int value) { this->Value = value; } 
    int Value; 
}; 

컴파일러가를 건너 뛰고 그냥 INT에서 직접 할당 알고 있나요 : 나는 변환 생성자를 위해 무엇을 여기

이야? 어떻게 이것을 테스트하여 오히려 중요하기 때문에 ...

+0

당신은 아무것도를 시도 (그들이 explicit 명시 적 캐스팅 만 암시하지 변환을 허용 할 수 있도록)? – 0x499602D2

+1

변환 생성자를 정의해야하지만 성능을 저하시키는 이유는 무엇입니까? 그것은 인라인 될 것이고 많은 경우에 no-op를 끝낼 것입니다. – jogojapan

+3

@David : 바보 같은 질문입니다. 그는 자신이 수행 한 일을 성취하기 위해 문법이나 숙어를 모른다. 그는 무엇을해야합니까? 그는 편집장에 임의의 문자를 입력하고 편집하여 원하는대로 처리해야합니까? –

답변

3

생성자를 제공하여 기본 유형에서 래퍼로 변환 및 캐스팅 할 수 있도록합니다. 변환 연산자를 사용하여 래퍼에서 기본 클래스로 변환 캐스팅을 허용하십시오.

class my_wrapper { 
    my_wrapper(int); // casting from int 
    operator int(); // casting to int 
}; 

+0

잘 작동합니다. int에서 캐스팅하는 데 필요한 메서드가 필요하다는 점을 제외하고는 성능을 위해 코드를 실행하지 않고 캐스팅하려고합니다. –

+3

@RyanBrown 오버 헤드없이 인라인됩니다. – Pubby

+0

100 % 확실합니까? 수학 라이브러리를 구축하고 싶지 않습니다. 속도가 빠르지 않으면이 문제를 해결하십시오. –