我正在编写一个matrix
打印到文件和的模板类std::cout
,即:
matrix<float> myMat;
...
myMat.cout(...) // print to std::cout
myMat.write("out.txt") // print to file
两者都将共享一个通用的底层打印功能,我也尝试将其实现为模板,因为我已经看到了用于thrust::copy
将数据写入std::cout
文件和文件的不同示例。
下面是我所做的工作的骨架,但它目前正在输出垃圾。谁能指出我可能犯的一些错误?例如,我可以std::cout
这样穿行吗?
template <typename data_T> matrix {
...
template <typename out_T> int printTo(out_T &out, ...) {
data_T *start = ..., *end = ...;
...
thrust::copy(start, end, std::ostream_iterator<data_T>(out, " "));
...
}
int cout(...) {
...
printTo(std::cout, ...);
...
}
int write(char* path, ...) {
...
std::ofstream file;
file.open(path);
printTo(file, ...);
...
}
}
编辑:
- 更改为
int printTo(std::ostream &out, ...) {...}
并不能解决问题。 - 更多信息
thrust::device_vector<T>
:我从 a 将数据读入矩阵,然后使用(因为 CUBLAS 库使用原始指针)dvec
将其转换为data_T
指针。然后我操作,然后想打印出来。pvec
thrust::raw_pointer_cast(&dvec[0])
pvec
- 我试过
thrust::device_vector
直接从原始指针(即*dvec
)打印,它确实有效:thrust::copy((*dvec).begin(), (*dvec).begin() + n ...)
. 那么为什么我只能使用*dvec
迭代器而不是原始指针强制复制pvec
呢?