2012-10-01 2 views
1

A<double>A<float>으로 캐스팅하고 싶습니다. 내가 시도한 것은 다음과 같습니다.변환 연산자가 템플릿 인수 만 다른 클래스로 변환 중입니까?

#include<iostream> 

template<class T1> 
class A { 
    template<class T0> 
    operator A() { 
    std::cout << __PRETTY_FUNCTION__ << "\n"; 
    } 
}; 

template<class T0,class T1> 
void bar(const A<T0>& a, const A<T1>& b) 
{ 
    reinterpret_cast< const A<T0> >(b); 
} 


int main() 
{ 
    A<float> a_f; 
    A<double> a_d; 
    bar(a_f,a_d); 
} 

컴파일러가 뱉어내는 코드는 error: invalid cast from type ‘const A<double>’ to type ‘const A<float>’입니다.

변환 연산자가 템플릿 인수 만 다른 클래스로 변환 할 수 있습니까? 그렇다면 : 어떻게? 템플릿 인수없이

template<class T0> operator A<T0> ... 
+0

아마도 템플릿 복사 생성자입니까? 아마도 – chris

+0

. 내가 캐스팅을 원하는 이유는 캐스팅이 no-op 여야한다는 것입니다. 캐스팅이 noop 일 때 같은 유형으로 캐스팅 되어야만합니다. – ritter

+0

"캐스팅이 무의미해야합니다."는 말이 맞지 않습니다. 일반 복사 생성자를 선택하라는 의미입니까? 생성자 템플릿 접근법을 취하면 그렇게 될 것입니다. –

답변

1

, A<T1>, 즉 무 조작과의 전환.

+0

죄송합니다. 따라 가지 마십시오. 조금 더 자세히 설명해 주시겠습니까? – ritter

+0

내가 작성한 것과 같이 보이도록 운영자를 변경하십시오. 너의 템플릿 인자'T0'을 사용하지 않는다. –

+0

아니요, 작동하지 않습니다 – ritter

관련 문제