Во время моего свободного времени я столкнулся с проблемой.
Скажем, есть большая программа 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
Если данные должны проходить через границы процесса, вы не можете избежать сериализации данных в переносимом формате. Особенно, если данные содержат любые указатели/ссылки на другую память или даже на собственные внутренние элементы, поскольку эти указатели/ссылки не будут действительны в другом адресном пространстве процесса.