将函数移到类定义之外

Move function outside class definition

本文关键字:定义 函数      更新时间:2023-10-16

我正在尝试增强具有矩阵类的库的可读性。特别是,我希望用户在查看类定义时能够直接了解情况。因此,我将实际函数移到定义之外。但是,我似乎对复制构造函数不成功。特别是我没有成功正确定义模板。

一个最小的示例(具有类定义之外的函数(如下:

#include <vector>
template<class X>
class matrix
{
private:
  std::vector<X> m_data;
public:
  matrix(){};
  matrix(size_t n);
  X& operator[](size_t i);
  size_t size();
  template<
    typename U,typename V=X,
    typename=typename std::enable_if<std::is_convertible<X,U>::value>::type
  >
  operator matrix<U> ()
  {
    matrix<U> out(size());
    for ( size_t i = 0 ; i < size() ; ++i )
      out[i] = static_cast<U>( m_data[i] );
    return out;
  }
};
template<class X>
matrix<X>::matrix(size_t n)
{
  m_data.resize(n);
}
template<class X>
X& matrix<X>::operator[](size_t i)
{
  return m_data[i];
}
template<class X>
size_t matrix<X>::size()
{
  return m_data.size();
}
int main()
{
  matrix<double> A(3);
  matrix<int> B = A;
}

假设你的问题指的是转换运算符模板(你只有隐式复制结构体(,移出成员模板的语法需要规范两个模板参数(类优先,没有默认值(,因此:

template<class X>
template<typename U,typename V,typename E>
matrix<X>::operator matrix<U> ()
{
  //...