C++ c++;:检测向量是否为<;综合体>;在函数中键入
我有一个模板函数,可以将std::vector类型打印到文件中。 是否可以在此函数中检测向量的类型并更改一些打印,例如,我想知道它是否为“复杂”类型向量,打印结果是否为不同的格式-“x+iy” 代码段供参考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
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";
}