在C ++中,我有一个返回vnl_matrix<int>
的类,第二个需要vnl_matrix<double>
作为输入。有没有一种简单的方法可以从vnl_matrix<int>
转换为vnl_matrix<double>
,除了在双循环中逐个转换矩阵的每个元素?
//: Creates a new matrix and copies all the elements.
// O(m*n).
template <class T>
vnl_matrix<T>::vnl_matrix (vnl_matrix<T> const& from)
: num_rows(from.num_rows), num_cols(from.num_cols)
{
vnl_matrix_construct_hack();
if (from.data && from.data[0]) {
vnl_matrix_alloc_blah();
T const *src = from.data[0];
vcl_copy( src, src + this->num_rows * this->num_cols, this->data[0] );
}
else {
num_rows = 0;
num_cols = 0;
data = 0;
}
}
答案 0 :(得分:2)
将一个转换为另一个的唯一方法是,如果你有这样的构造函数:
template <typename T>
class vnl_matrix {
// conversion
template <typename U,
typename = std::enable_if<std::is_convertible<U,T>::value>::type>
vnl_matrix(const vnl_matrix<U>& rhs);
};
该构造函数可能会将矩阵中的所有单元格转换为循环。但你必须补充一点 - 这里没有默认机制。同样,请注意,没有办法'#34;施放&#34;从vector<int>
到vector<unsigned int>
- 您必须在那里手动构建新的向量。