私はマトリックスクラスを特徴とする私のライブラリの読みやすさを向上させようとしています。特に私は、クラス定義を見るときに、ユーザが直接的な概要を得ることを望みます。したがって、私は定義の外で実際の関数を移動しています。ただし、コピーコンストラクタの場合は失敗したようです。特に、テンプレートを正しく定義することはできません。クラス定義の外に関数を移動
最小限の例では、(クラス定義の外の機能を搭載)以下の通りです:あなたの質問を想定し
#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;
}
はすべて '\\'文字とは何ですか? – Bathsheba
コピーコンストラクタはどこですか?そこには変換演算子テンプレートしか表示されていません... –
あなたはもちろんもちろん....! –