我正在写一个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>
数据读入矩阵,说dvec
,并将其转换为使用thrust::raw_pointer_cast(&dvec[0])
一个data_T
指针pvec
(作为CUBLAS库使用原始指针)。然后我运行pvec
,然后打印出来。 - 我试过直接从原始
thrust::device_vector
的指针打印(即*dvec
),它确实工作:thrust::copy((*dvec).begin(), (*dvec).begin() + n ...)
。那么,为什么我只能使用*dvec
迭代器而不是原始指针pvec
来复制?
你不需要做'printTo'一个模板函数。简单地说,第一个参数是一个'std :: ostream'引用。 – 2013-05-04 23:43:40
@JoachimPileborg,谢谢 - 我已经把它改成了'int printTo(std :: ostream&out,...){...}',但它仍在输出垃圾。任何其他想法? – mchen 2013-05-04 23:49:51
你如何存储“数据”?你如何实际初始化'start'和'end'? – 2013-05-04 23:55:36