Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;:检测向量是否为<;综合体>;在函数中键入_C++_Templates_Vector_Runtime - Fatal编程技术网

C++ c++;:检测向量是否为<;综合体>;在函数中键入

C++ c++;:检测向量是否为<;综合体>;在函数中键入,c++,templates,vector,runtime,C++,Templates,Vector,Runtime,我有一个模板函数,可以将std::vector类型打印到文件中。 是否可以在此函数中检测向量的类型并更改一些打印,例如,我想知道它是否为“复杂”类型向量,打印结果是否为不同的格式-“x+iy” 代码段供参考 template < typename myVec > void VectorPrint2File(const std::vector < myVec > & v, const char * str, std::ofstream &am

我有一个模板函数,可以将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";
        }
    }
模板
void VectorPrint2File(const std::vector&v,
const char*str,std::ofstream和fileptr){

fileptr您可以将打印代码包装到函数中。添加两个重载,第一个用于打印任何类型,第二个专用于任何std::复杂类实例:

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();
}
模板
无效打印(标准::流和os、常数T和变量){

os如果您使用的是c++17,请查看
If constexpr
。这听起来像是您可能想研究类继承/多态性而不是模板。@Jacob否。这听起来像是“类继承/多态性”的对立面
for (int i = 0; i < v.size(); ++i) {
    print(fileptr, v[i]);
    if (i != v.size() - 1)
        fileptr << "\n";
}