13

a ...のベクトルのベクトルのベクトルを宣言したいとしましょう(最大n次元)。

そのようです:

using namespace std;
// for n=2
vector<vector<int> > v2;
// for n=3
vector<vector<vector<int> > > v3;
// for n=4
vector<vector<vector<vector<int> > > > v3;

テンプレートメタプログラミングを使用して任意のnに対してこれを実行する方法はありますか?

4

1 に答える 1

20

はい、それはかなり簡単です。

帰納法による証明と同じように、再帰ケースと、再帰を終了する(部分的に特殊化された)ベースケースを設定します。

template<size_t dimcount, typename T>
struct multidimensional_vector
{
    typedef std::vector< typename multidimensional_vector<dimcount-1, T>::type > type;
};

template<typename T>
struct multidimensional_vector<0,T>
{
    typedef T type;
};

multidimensional_vector<1, int>::type v;
multidimensional_vector<2, int>::type v2;
multidimensional_vector<3, int>::type v3;
multidimensional_vector<4, int>::type v4;
于 2012-10-28T01:03:01.527 に答える