在vnl matrix <int>和vnl matrix <double> </double> </int>之间进行转换的最佳方法

时间:2015-01-22 16:22:03

标签: c++

在C ++中,我有一个返回vnl_matrix<int>的类,第二个需要vnl_matrix<double>作为输入。有没有一种简单的方法可以从vnl_matrix<int>转换为vnl_matrix<double>,除了在双循环中逐个转换矩阵的每个元素?

编辑:基于另一个矩阵的矩阵构造函数如下(我没有写它,详见here。是否可以修改此构造函数以允许&#34;复制/铸造&#34;

//: 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;
  }
}

1 个答案:

答案 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> - 您必须在那里手动构建新的向量。