使用模板重载类的成员函数
Posted
技术标签:
【中文标题】使用模板重载类的成员函数【英文标题】:Overloading Memberfunction for a class with templates 【发布时间】:2014-11-20 19:23:51 【问题描述】:当我有一个带有模板的类时,我该如何实现,依赖于数据类型,我可以计算某事。具有一定的成员函数。 我构建了一个最小示例,其目标是将两个数字相乘,这两个数字可以是实数也可以是复数,结果只取它的实数部分:Rea*b。
这是头文件,test.hpp:
ifndef __TEST_H__
#define __TEST_H__
template<typename T1, typename T2>
class A
public:
A(T1 const & a_, T2 const & b_);
double multiply_and_real();
private:
T1 const & a;
T2 const & b;
;
#endif /* __TEST_H__ */
还有这个 cpp 文件,test.cpp:
#include "test.hpp"
#include <complex>
#include <cmath>
template<typename T1, typename T2>
A<T1,T2>::A(T1 const & a_, T2 const & b_):
a(a_),
b(b_)
template<typename T1, typename T2>
double A<double,double>::multiply_and_real()
return a*b;
template<typename T1, typename T2>
double A<std::complex<double>,double>::multiply_and_real()
return a.real()*b;
template<typename T1, typename T2>
double A<double,std::complex<double> >::multiply_and_real()
return a*b.real();
template<typename T1, typename T2>
double A<std::complex<double>,std::complex<double> >::multiply_and_real()
return a.real()*b.real();
template class A< double, double >;
template class A< std::complex<double>, double >;
template class A< double,std::complex<double> >;
template class A< std::complex<double>,std::complex<double> >;
我怎样才能以正确的方式做到这一点?使用此实现,我会收到以下错误消息:
error: prototype for ‘double A<double, double>::multiply_and_real()’ does not match any in class ‘A<double, double>’
double A<double,double>::multiply_and_real()
【问题讨论】:
【参考方案1】:由于您专门使用以下语法,请注意 template<>
eveywhere
template<>
double A<double,double>::multiply_and_real()
return a*b;
template<>
double A<std::complex<double>,double>::multiply_and_real()
return a.real()*b;
template<>
double A<double,std::complex<double> >::multiply_and_real()
return a*b.real();
template<>
double A<std::complex<double>,std::complex<double> >::multiply_and_real()
return a.real()*b.real();
另请阅读this以避免您未来的疑虑;
【讨论】:
"`A以上是关于使用模板重载类的成员函数的主要内容,如果未能解决你的问题,请参考以下文章