c ++: определить, является ли вектор <complex>типом внутри функции - PullRequest
1 голос
/ 25 марта 2020

У меня есть шаблонная функция, которая печатает типы std :: vector в файл. можно ли определить тип вектора в этой функции и изменить некоторые отпечатки, скажем, например, я хотел бы знать, если его вектор «сложного» типа, и результаты печати будут в другом формате - «x + iy»

фрагмент кода для справки

template < typename myVec >
    void VectorPrint2File(const std::vector < myVec > & v,
        const char * str, std::ofstream & fileptr) {
        fileptr << str << std::endl;
        fileptr << "vector size: " << v.size() << std::endl;
        for (int i = 0; i < v.size(); ++i) {
            fileptr << v[i];
            if (i != v.size() - 1)
                fileptr << "\n";
        }
    }

Заранее спасибо!

1 Ответ

1 голос
/ 25 марта 2020

Вы можете заключить код печати в функцию. Добавьте две перегрузки: первая для печати любого типа, вторая специализированная для любых std :: complex экземпляров класса:

template<class T>
void print(std::ofstream& os, const T& var) {
    os << var;
}

template<class T>
void print(std::ofstream& os, const std::complex<T>& var) {
    os << var.real() << " + i" << var.imag();
}

и вызов в вашей функции:

for (int i = 0; i < v.size(); ++i) {
    print(fileptr, v[i]);
    if (i != v.size() - 1)
        fileptr << "\n";
}
...