Как я могу отправить весь класс из одного процесса в другой, избегая сериализации?

0

Во время моего свободного времени я столкнулся с проблемой.

Скажем, есть большая программа A.cpp, написанная мной, и есть файл B.cpp, сгенерированный bison + flex. Во время запуска программы A я хочу выполнить синтаксический анализатор (B), а затем вернуть очень сложный объект в A.

Существуют ли какие - либо способы, чтобы выполнить эту задачу, другие затем сериализовать класс в трубу?

UPD Проблема с сериализацией проста: я просто не могу связать библиотеки boost с моим.cpp.

Я попытался переустановить libboost-dev 1.46, но линкер продолжает кричать, что ссылки не выполняются.

Мой код выглядит так:

A.cpp
class blah {
  void read () {
      yyparse();
      arch >> *this;
  }
}

B.cpp:
int main() {
   yyparse(); // yacc parsing
   arch << result;
}

Мой make файл выглядит так:

bison -d -v reader.y
cp reader.tab.c bison.c
cmp -s reader.tab.h tok.h || cp reader.tab.h tok.h
g++ -O2 -std=c++0x -w -l boost_serialization  -c bison.c -o bison.o
flex -d reader.lex
cp lex.yy.c lex.c
g++ -O2 -std=c++0x -w -l boost_serialization  -c lex.c -o lex.o
g++ -O2 -std=c++0x -w -l boost_serialization  -c reader.cpp -o main.o
g++ -O2 -std=c++0x -w -l boost_serialization  bison.o lex.o main.o -o reader -lfl
  • 0
    "Дамы и..."? Отдельно вы имеете в виду «очень сложный объект для А»? Классы не имеют представления во время выполнения. Возможно, вы могли бы поместить объект в общую память или в файл и карту памяти ...? Или встраивайте анализатор в программу A, чтобы он мог генерировать класс в том же пространстве памяти.
  • 0
    CORBA? COM? DCOM? Зависит от технологии, которую вы хотите использовать
Показать ещё 19 комментариев
Теги:
protocols

1 ответ

1
Лучший ответ

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

  • 0
    На самом деле разделяемая память требует сериализации.
  • 0
    Хорошо представьте, что ваш объект содержит указатель или ссылку.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню