2D-массив в основном представляет собой 1D-массив указателей, где каждый указатель указывает на 1D-массив, который будет содержать фактические данные.
Здесь N - строка, а M - столбец.
динамическое распределение
int** ary = new int*[N];
for(int i = 0; i < N; i++)
ary[i] = new int[M];
fill
for(int i = 0; i < N; i++)
for(int j = 0; j < M; j++)
ary[i][j] = i;
for(int i = 0; i < N; i++)
for(int j = 0; j < M; j++)
std::cout << ary[i][j] << "\n";
бесплатно
for(int i = 0; i < N; i++)
delete [] ary[i];
или
delete [] ary;
Журнал доктора Dobb имеет статью , Создающую Вашу Собственную Сменную Платформу: Часть 1 , которая является довольно хорошим чтением на предмете. Это - запуск ряда статей, который покрывает архитектуру, разработку и развертывание C/C++ межплатформенная сменная платформа.
Вы могли бы также хотеть рассмотреть замену стандартного сменного интерфейса интерфейсом сценариев. Существует некоторая очень хорошая привязка для нескольких языков сценариев в C/C++, которые уже решили Вашу проблему. Это не могла бы быть плохая идея создать сверху их. Например, взгляните на Повышение. Python .
Qt имеет очень хорошую систему для плагинов, которые я использовал в прошлом. Это использует систему метаобъекта QT для преодоления многих проблем, обычно находил при попытке разработать плагины C++.
Один пример то, как Q_DECLARE_INTERFACE
работы, чтобы препятствовать тому, чтобы Вы использовали несовместимый плагин. Другой ключ сборки , чтобы удостовериться, что Вы загружаете корректный плагин для своей архитектуры, ОС, компилятора. Если Вы не используете сменную систему QT, это вещи, о которых необходимо будет волноваться и изобрести решения для самостоятельно. Это - не обязательно аэрокосмические исследования, и я не говорю, что Вы перестали бы работать в нем, но парни в Trolltech довольно умны и потратили некоторое время, думая об этом, и я использовал бы то, что они создали, чем перестройте колесо сам.
Другой пример - то, что RTTI обычно не работает через границы DLL, но при использовании QT, вещей как qobject_cast, которые полагаются на систему метаобъекта, действительно работает через границы DLL.
Я думаю, что Вы - безопасное создание сменной системы на основе:
, Вероятно, самая успешная система плагина C++: старый добрый Adobe Photoshop . И если не, что, один из виртуальных форматов синтезатора, таких как VSTi и т.д.
Книга C++ Имперфекта Matthew Wilson имеет хорошую информацию об этом.
совет в том, чтобы казаться быть: пока Вы используете то же (или equivelant) компилятор, можно использовать C++, иначе Вы лучше из использования C как интерфейс сверху Вашего кода C++.
ACE имеет кросс-платформенную сменную архитектуру.
Выезд:
я предложил бы проверить книгу
Руководство Программиста ACE
У меня есть свой собственный игровой механизм, который имеет систему плагина C++.
у меня есть некоторый код в заголовочных файлах, таким образом, он помещается в единицу компиляции плагина.
Большие функции, которые живут в основном механизме, вызваны через экспортируемую функцию C (плагин называет MyObject_somefunction (MyObject *obj), который в механизме просто называет obj-> somefunction ()). Если вызывание функции C ужасно для Вашего вкуса, затем с некоторым обманом заголовка, когда заголовок включен в плагин, имейте функцию членства #defined для вызывания функции C:
#if defined(IN_THE_PLUGIN)
void MyObject::somefunction() { MyObject_somefunction(this); }
#endif
Виртуальные функции или должны быть чистыми или жизни кода в заголовочном файле. Если я не наследовался классу и просто просто инстанцирую один, код виртуальной функции может жить в механизме, но тогда класс должен экспортировать некоторые функции C для создания и уничтожения объекта, который называют от плагина.
В основном, приемы, которые я использовал с целью быть для поддержания общей независимости от платформы, просто составляют экспорт C и приемы заголовочного файла.
Firefox работает на XPCOM ( http://www.mozilla.org/projects/xpcom/ ). Он вдохновлен Microsoft COM, но является мультиплатформенным.