Предварительное объявление внешних данных из DLL в основную программу

Я пишу DLL, которая содержит определение класса C ++ и базовую программу, основанную на шаблоне прокси, как описано в этом руководстве: http://www.linuxjournal.com/article/3687

В частности, эта dll, после загрузки в базовую программу, будет заполнять свое определение, включая имя класса, имя метода и указатель на функцию метода в структуре данных базовой программы.

Однако я хочу изменить этот шаблон для разных классов, а не только для одного базового вида в статье, поэтому я использую указатель на функцию.

Моя программа выглядит следующим образом:

//the base class
class common_object{
};

//this factory is used for storing constructor for each c++ class in the dll.
typedef common_object *maker_t();
extern map< string, maker_t* > factory;

//store all the methods of a class
//string: method's name
typedef map<string, proxy::method> method_map;
//string: class's name
extern map<string, method_map> class_map_;

// our global factory
template<typename T>
class proxy {
public:
typedef int (T::*mfp)(lua_State *L);
typedef struct {
const char *class_name;
const char *method_name;
mfp mfunc;
} method;

proxy() {
std::cout << "circle proxy" << endl;
// fill method table with methods from class T
// initialize method information for the circle class
method_map method_map_;
for (method *m = T::methods;m->method_name; m++) {
/* edited by Snaily: shouldn't it be const RegType *l ... ? */
method m1;
m1.class_name = T::className;
m1.method_name = m->method_name;
m1.mfunc = m->mfunc;
method_map_[m1.method_name] = m1;
}
//register the circle class' description
class_map_[T::class_name] = method_map_;
}
};

В этой программе я извлекаю две структуры данных основной проблемы:

  1. class_map: содержит все классы в DLL, загруженные в ядро
    программа. method_map:
  2. method_map: содержит описание всех методов для каждого
    учебный класс.
    отношение между class_map и методом однозначно.
    Однако я сталкиваюсь с проблемой порядка объявления class_map_ и method_map. В частности, я extern class_map вне класса Proxy, но я также должен определить структуру метода внутри этого класса.
    Я попытался использовать предварительную декларацию по следующей ссылке: Когда я могу использовать предварительную декларацию?, но это не работает

Я надеюсь увидеть ваше решение по моей проблеме. Спасибо

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]