템플릿 클래스를 오버로드하는 방법에 대해 궁금합니다. 내가 다음 수업을 듣는다면. T 복잡한 형태 인 경우 나,템플릿 클래스 오버로드
template <class T>
void A<double>::print_data(){
printf("%g",date);
}
: 나는 T 더블 타입 인 경우, 나는 다음 의사 코드와 같은 기능을 필요 T.
template <class T>
class A {
T data;
public:
void print_data(void);
}
의 다른 유형에 대해 서로 다른 기능을 만들려면 다음과 같이 작동해야합니다.
template <class T>
void A< complex<double> >::print_data(){
printf("%g+%gi",data.real(),date.imag());
}
이 목표는 어떻게 달성해야합니까? 고맙습니다!
해결책을 찾았지만별로 좋지 않다고 생각합니다. 기본 개념은 오버로드에 입력 매개 변수를 사용하는 것입니다.
template <class T>
class A {
public:
T data;
void print_data(double);
void print_data(complex<T>);
}
template <class T>
void A<T>::print_data(double){
printf("%g",date);
}
template <class T>
void A<T>::print_data(complex<T>){
printf("%g+%gi",data.real(),date.imag());
}
int main(void)
{
//just demonstrate the idea, may not work
A<double> ddata;
A<complex> cdata;
ddata.data = 2.0;
cdata.data = complex(1,2);
ddata->print_data(ddata);
cdata->print_data(cdata);
return 0;
}
누구에게 더 좋은 해결책이 있습니까?
는 당신이 시도 해 봤나? (함수 반환 형식을 잊지 마세요!) –
Skippy하려면 print_data() 함수를 만들고 싶습니다. 내가 여기서주고있는 것은 잘못이다, 그들은 단지 내가 얻고 싶은 것을 보여주고있다. – lengfei
David에게 : 예, 위 코드를 반환 유형으로 시도했지만 컴파일 오류가 발생합니다. – lengfei