Предположим, что у меня есть некоторый указатель, которому я хочу дать иное толкование как статическая ссылка на массив размера:
double *p;
double (&r)[4] = ?(p); // some construct?
// clarify
template< size_t N> void function(double (&a)[N]);
...
double *p;
function(p); // this will not work.
// I would like to cast p as to make it appear as double[N]
Действительно ли возможно сделать так? как я делаю это?
Это уродливо:
double arr[4];
double* d = arr;
double (&a)[4] = *static_cast<double(*)[4]>(static_cast<void*>(d));
Убедитесь, что тип массива совпадает с исходным значением указателя.
double *array;
...
...
int sizearray = sizeof(array)/sizeof(double);
Да, это называется вектор
:)
std::vector<double> myVariableArray(4)
EDIT: Перечитал, похоже, что вы хотите получить размер массива, который был объявлен. Вы не можете этого сделать - это функция метода шаблона, которую вы можете использовать в отдельных случаях. Поскольку double *
даже не должен указывать на double
, компилятор вряд ли сможет дать вам разумный ответ в любом случае.