Я пытаюсь написать класс, который в простейшем примере работает следующим образом:Как исправить этот шаблон класса
// Example program
#include <iostream>
#include <complex>
#include <typeinfo>
template<typename NumberType>
class SomeClass
{
public:
SomeClass(NumberType a_) : a(a_) {}
void get_number()
{
if (typeid(NumberType) == typeid(std::complex<double>))
std::cout << a.real() << " " << a.imag() << std::endl;
else
std::cout << a << std::endl;
}
private:
NumberType a;
};
int main()
{
int a=1;
std::complex<double> c(2.0,3);
SomeClass<int> A(a);
A.get_number();
SomeClass<std::complex<double>> C(c);
C.get_number();
return 0;
}
Это в основном печатает любое действительное число, как это, но он должен разделить комплексное число в два двух реала.
Если я скомпилировать его, как это показано, сообщение об ошибке выглядит следующим образом
In instantiation of 'void SomeClass<NumberType>::get_number() [with NumberType = int]':
28:18: required from here
14:46: error: request for member 'imag' in '((SomeClass<int>*)this)->SomeClass<int>::a', which is of non-class type 'int'
14:27: error: request for member 'real' in '((SomeClass<int>*)this)->SomeClass<int>::a', which is of non-class type 'int'
Я понимаю, что с a
имеет тип int
в первом случае, я не могу использовать imag()
на нем, следовательно, сообщение об ошибке.
Как я могу изменить этот класс, чтобы он делал то, что мне нужно в случае произвольных аргументов шаблона ?