【发布时间】:2015-08-24 13:27:38
【问题描述】:
我有一个A 模板化的类Scalar,它可以是实值或复值。它有一个方法realPart,它应该返回数字的实部。如果Scalar 是实值,它应该只返回原始标量,如果它是复杂类型,则返回.real()。
写作时
#include <complex>
#include <iostream>
template<class Scalar>
class A {
public:
A (const Scalar z):
z_(z)
{
}
Scalar realPart()
{
return z_.real();
}
private:
Scalar z_;
};
int main() {
A<std::complex<double>> z0((1.0, 2.0));
std::cout << z0.realPart() << std::endl; // check
A<double> z1(1.0);
std::cout << z1.realPart() << std::endl; // mööp
}
编译器会在z1.realPart() 抱怨,因为double 不知道.real()。
如何在编译时保护.real()?
【问题讨论】:
-
你到底想用 double 发生什么?
-
您可以为复杂类型创建模板特化。
-
@DavidHaim 在
double的情况下,只需return z_,就像你在数学上所期望的那样。 -
就像@AkashPradhan 说的为它创建一个模板专业化。
-
查看带有类型特征的stackoverflow模板条件stackoverflow.com/questions/6251889/type-condition-in-template
标签: c++ templates complex-numbers