假設我想聲明一個向量的向量...(最多n維)。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?
假設我想聲明一個向量的向量...(最多n維)。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?
是的,它非常簡單。
就像歸納證明一樣,我們設置了一個遞歸案例和一個結束遞歸的(部分專業化的)基礎案例。
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;
[Boost.MultiArray的(http://www.boost.org/doc/libs/1_51_0/libs/multi_array/doc/index.html) –