Поскольку это C, вы не можете обернуть все в удобный объект C ++.
Но я бы сделал нечто подобное. Разработайте ряд функций, которые будут распределять, манипулировать и уничтожать ваш новый тип данных.
Чтобы прочитать или записать часть данных, вызовите функцию. Никогда не трогайте данные напрямую. На самом деле, если вы можете использовать дескриптор void*
для своих данных и даже не помещать реальные типы данных во включенный заголовочный файл, это лучшее, что нужно сделать.
При этом вы можете определить функции как работающие с одним очень большим блоком памяти, набором больших блоков памяти или даже базой данных на диске.
Теперь, когда я написал это, позвольте мне частично забрать это. Если вам нужно больше производительности, вы можете определить все функции во включенном заголовочном файле как встроенные определения. Это позволит вашему компилятору удалить почти все накладные расходы при вызове функции и агрессивно оптимизировать.
Я признаю, что matrix_set(x, y, z, value)
не так хорош, как matrix[x][y][z] = value
, но он будет работать так же хорошо.