I am trying to implement the reshape
function of fortran with C++(11/14) and I designed a function. This function accepts two std::initializer_list
. The first initializer_list
gives initial values which I use to initialize a D
-dimensional array. The second initializer_list
gives size of each dimension of the array.
I wrote a draft like this
template<int D, typename T>
auto forreshape(const std::initializer_list<T> & values, const std::initializer_list<int> & shape)
{
// some irrelevant codes to calculate lbound
return for1array_gen<T, D>(lbound, shape, values); // returns D dimension array fornarray<T, D>
}
int main(){
auto reshaped_array = forreshape<2>({1, 2, 3, 4, 5, 6}, {2, 3});
}
This implementation requires given non type template parameter int D
, but I want something without D
, like forreshape({1, 2, 3, 4, 5, 6}, {2, 3});
.
At first I want to use std::initializer_list<T>::size
, however from static-assert-on-initializer-listsize I know it doesn't work. Looking around I found how-to-cause-a-compile-time-error-based-on-the-size-of-an-initializer-list but it didn't help to my case.
I thought the compiler can get enough infomation and deduce value of int D
automaticlly, but I don't know how. Maybe its a bad idea to use std::initializer_list
? I got totally lost here