Вы можете использовать шаблоны, чтобы найти длину массива.
template<typename T, size_t N>
size_t arraylen( T(&)[N] )
{ return N; }
Я бы хотел продвинуть эту идею на шаг вперед.
struct Foo
{
template< typename T, size_t N >
Foo( /* ??? */ ) : ptr(?), size(?) { }
char* ptr;
size_t size;
};
int main()
{
Foo foo("test");
const char bar[] = "test2";
Foo foo2(bar);
const char* baz = bar;
Foo foo3(baz); // compiler error.
}
Тем не менее, для жизни я не могу получить синтаксис для компиляции. Я думаю, что часть того, чего мне не хватает - я не очень понимаю, что означает T(&)[N]
.
Что означает T(&)[N]
?
Как мне разрешить доступ к адресу массива, сохраняя его размер с помощью шаблонов?