Ты мог бы сделать это так, как Томалак, но я, конечно, не рекомендовал бы это.Вы никогда не сможете вызывать эту функцию из другой, которая также не была бы шаблоном, если массив передавался через params.Это означает, что почти вся ваша программа должна быть шаблонным кодом.Хорошо, теоретически, но в целом непрактично.
Вы не можете использовать интерфейс double**
, как вы узнали.Вы можете привести к этому типу, но тогда вам также понадобится передать информацию о размере, чтобы вы могли:
my_ptrptr[row * col_size][col];
Вы должны четко указывать размеры, подобные этому, потому что компилятор больше не знает, что оннужно.
Лучший ответ на вашу проблему - не делать это таким образом.Используйте STL, чтобы вам не приходилось иметь дело с таким хреновым дерьмом, как это.Воспользуйтесь ответом Стефана.
Еще одна вещь, которую вы можете сделать, хотя, если вы все равно будете использовать шаблоны, это написать ее, чтобы она была универсальной:
template < typename Iter >
void fun(Iter begin, Iter end)
{
// begin[x][y]... (*begin)[y]...++begin, etc...
}
...
double arr[arr_row_count][arr_col_count];
fun(arr, arr+arr_row_count);
Это имеет главноеПреимущество работы с НИЧЕГО, что выглядит как массив массивов.Это означает, что он станет отличным «промежуточным» методом, который вы можете использовать с вашими типами double[][]
до тех пор, пока не начнете использовать что-то лучше, например std::vector
и / или boost::array
.Сделай так, как делает Томалак, и ты не сможешь сделать это позже ... еще одна причина не использовать этот метод.