我正在尝试增强具有矩阵类的库的可读性。特别是我希望用户在查看类定义时获得直接的概览。因此,我将实际功能移到定义之外。但是,对于复制构造函数,我似乎没有成功。特别是我没有成功正确定义模板。
一个最小的例子(具有类定义之外的函数)如下:
#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> ()
{
//...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句