-3

我想知道如何重载模板类。如果我有以下课程。我想为不同类型的 T 创建不同的功能。

template <class T>
class A {
    T data;
public:
    void print_data(void);
}

如果 T 是双精度类型,我需要一个类似以下伪代码的函数:

template <class T>
void A<double>::print_data(){
   printf("%g",date);
}

如果 T 是复杂类型,我需要它像这样工作:

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;
}

有人有更好的解决方案吗?

4

1 回答 1

1

只需将模板函数专门用于具体类型:

template <>
void A<double>::print_data()
{
    std::cout << data << std::endl;
}
template<>
void A<complex<double> >::print_data(){
    std::cout <<  data.real() << "+" << data.imag() << std::endl;
}
于 2013-07-29T02:00:44.463 回答