我正在尝试增强我的库的可读性,该库具有矩阵类。特别是我希望用户在查看类定义时能够直接了解。因此,我将实际功能移到定义之外。但是,我似乎对复制构造函数不成功。特别是我没有成功正确定义模板。
最小的例子(以类定义之外的函数为特征)如下:
#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;
}
答案 0 :(得分:2)
假设您的问题涉及转换运算符模板(您只有隐式复制程序员),移出成员模板的语法需要指定模板参数(第一类,没有默认值),因此:
template<class X>
template<typename U,typename V,typename E>
matrix<X>::operator matrix<U> ()
{
//...