模板类重载

时间:2013-07-29 01:50:02

标签: c++ class templates overloading

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

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

如果T是double类型,我需要一个像伪代码一样的函数:

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

任何人都有更好的解决方案吗?

1 个答案:

答案 0 :(得分: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;
}