Скажем, у меня есть структура с кучей членов:
struct foo {
int len;
bar *stuff;
};
Как это случается, stuff
будет указывать на массив bar
с длиной len
.Я хотел бы закодировать это в типе stuff
.Так что-то вроде:
struct foo {
int len;
DependentLength<bar, &foo::len> stuff;
};
Тогда я мог бы реализовать DependentLength
, чтобы вести себя как указатель на массив столбцов, но это подтверждается при попытке взглянуть на индекс больше foo::len
.Однако я не могу реализовать DependentLength<&foo::len>::operator[]
, потому что operator [] принимает только один параметр - индекс, и ему нужно знать местоположение объекта 'foo', чтобы разыменовать параметр шаблона указателя на член и выполнить проверку assert.
Однако я знаю, что DependentLength будет когда-либо использоваться здесь только как член 'foo'.Что я действительно хотел бы сделать, так это сказать DependentLength, где найти len относительно себя , а не относительно указателя foo.Так что-то вроде DependentLength<(char*)&foo::stuff - (char*)&foo::len> stuff;
, но это не разрешено C ++.Есть что-то хорошее или неудачное, что может заставить эту работу работать?