我正在寫一個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