使用:
たとえば、あなたが使用することができます。 あなたがベクトルのベクトルのN次元ベクトルをコピーしなければならないときに問題が発生...
することはあなたがすることができます。この場合、
std::vector<std::vector<std::vector<double>>> vvvd
{ { {1.0, 2.0, 3.0}, { 4.0, 5.0, 6.0} },
{ {7.0, 8.0, 9.0}, {10.0, 11.0, 12.0} } };
std::vector<std::vector<std::vector<int>>> vvvi;
copy_multi_vec(vvvi, vvvd);
を次のように場合に働く機能copy_multi_vec()
たいとしますヘルパークラスで部分テンプレートの特殊化を使用する。例による
template <typename T1, typename T2>
struct cmvH
{ static void func (T1 & v1, T2 const & v2) { v1 = v2; } };
template <typename T1, typename T2>
struct cmvH<std::vector<T1>, std::vector<T2>>
{
static void func (std::vector<T1> & v1, std::vector<T2> const & v2)
{
v1.resize(v2.size());
std::size_t i { 0U };
for (auto const & e2 : v2)
cmvH<T1, T2>::func(v1[i++], e2);
}
};
template <typename T1, typename T2>
void copy_multi_vec (T1 & v1, T2 const & v2)
{ cmvH<T1, T2>::func(v1, v2); }
か、あなたが最後のレベルのためにassign()
方法を使用したい場合は
template <typename, typename>
struct cmvH;
template <typename T1, typename T2>
struct cmvH<std::vector<T1>, std::vector<T2>>
{
static void func (std::vector<T1> & v1, std::vector<T2> const & v2)
{
v1.resize(v2.size());
v1.assign(v2.cbegin(), v2.cend());
}
};
template <typename T1, typename T2>
struct cmvH<std::vector<std::vector<T1>>, std::vector<std::vector<T2>>>
{
static void func (std::vector<std::vector<T1>> & v1,
std::vector<std::vector<T2>> const & v2)
{
v1.resize(v2.size());
std::size_t i { 0U };
for (auto const & e2 : v2)
cmvH0<std::vector<T1>, std::vector<T2>>::func(v1[i++], e2);
}
};
を次のように、あなたはヘルパーの構造体を定義することができます