Dllexport используется для маркировки функции, как экспортируется. Вы реализуете функцию в своем DLL и экспортируете его так, это становится доступным любому использующему Ваш DLL.
Dllimport является противоположным: это отмечает функцию, как импортируемую из DLL. В этом случае Вы только объявляете подпись функции и связываете Ваш код с библиотекой.
C ++ - это C с большим количеством вещей. Итак, если вы хотите сделать это способом C, как указано выше, вы просто создаете массив указателей void
void *ary[10]; ary[0] = new int(); ary[1] = new float();
DA.
Если вы хотите делать что-то объектно-ориентированным способом, тогда вы хотите использовать коллекцию и иметь все, что вы собираетесь добавить в коллекцию, происходит от того же базового класса объектов, который может быть добавлен в коллекцию. В java это «объект», C ++ не имеет встроенного базового объекта, но в любой библиотеке коллекций, которую вы используете, будет такая вещь, которую вы можете создать в качестве подкласса.
Обычно, если вы хотите иметь коллекцию разных «типов» указателей, вы реализуете ее таким образом, чтобы они были производными от базового класса / интерфейса и сохраняли указатель на эту базу. Затем с помощью полиморфизма вы можете заставить их вести себя как разные типы.
class Base
{
public:
virtual void doSomething() = 0;
};
class A : public Base
{
void doSomething() { cout << "A\n"; }
};
class B : public Base
{
void doSomething() { cout << "B\n"; }
};
std::vector<Base*> pointers;
pointers.push_back(new A);
pointers.push_back(new B);
Массив указателей на аннулирование уже упоминался. Если вы хотите сделать его практичным и полезным, рассмотрите возможность использования массива (или, лучше, вектора) boost :: any .
Да. Двумя способами:
• Указатели на тип базового класса, которые указывают на объекты типов, производных от этого базового типа.
• Нетипизированные указатели void *
, которые необходимо вручную привести к реальным типам объектов, на которые они указывают.
Первый подход - это стандартное объектно-ориентированное программирование.
Второй подход полезен для низкоуровневых приложений. программирование на уровне (например, драйверы устройств, библиотеки управления памятью и т. д.) и считается опасным и подходит только для программистов, которые точно знают, что делают. Очевидно, что для определения реального типа каждого указателя требуется дополнительная бухгалтерская информация.
Да; просто приведите указатели в массиве к любому типу, на который вы хотите, чтобы они ссылались.
В качестве альтернативы, вы можете сделать свой массив массивом объединения (с элементами объединения, являющимися разными типами указателей).