我有一個A
類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()
?
你到底要帶雙到發生什麼事? –
您可以爲複雜類型創建模板特化。 –
@DavidHaim在'double'的情況下,只需'return z_',就像你所期望的那樣。 –