在类定义之外移动函数

时间:2017-11-17 08:04:06

标签: c++ c++14

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

最小的例子(以类定义之外的函数为特征)如下:

#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;
}

1 个答案:

答案 0 :(得分:2)

假设您的问题涉及转换运算符模板(您只有隐式复制程序员),移出成员模板的语法需要指定模板参数(第一类,没有默认值),因此:

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