重载具有模板的类的成员函数
Overloading Memberfunction for a class with templates
当我有一个带有模板的类时,我如何实现依赖于数据ypes,我可以使用某个成员函数计算sth。我构造了一个最小的例子,其中的目标是将两个数字相乘,这两个数字可以是实数,也可以是复数,而不是只取它的实数部分:Re{a*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 文件,测试.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(){
由于您专门使用以下语法,因此请注意 template<>
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();
}
另请阅读此内容以避免您将来的疑问;
相关文章:
- 如何使用指针传递给函数的数组中对象的函数成员
- c++构造函数成员初始化:传递参数
- 创建 std::函数,它返回具有函数成员值的变量.分段错误
- 如何在C++通过公共函数访问私有函数成员?
- 解释了构造函数成员初始化列表
- 调用std::函数成员时内存损坏
- 是否可以为模板类的模板函数成员设置别名?
- 捕获 lambda 函数C++成员变量
- 构造函数成员初始值设定项跨成员列出,安全吗?
- 获取与在模板参数中传递的函数成员类型相同的类
- 如何从公共函数成员访问地图私有成员
- C 构造函数成员分配优化
- 使用命名空间进行函数成员定义
- 函数成员作为 CUDA 内核的参数
- 模板基类函数成员的别名
- 函数成员中用于void和继承的enable_if
- 头文件中是否定义了一个很长的Class函数成员
- 类内/构造函数成员初始化
- 使用指向部分专用函数成员的指针自动填充向量
- 指向函数成员的指针