Я пишу реализацию для выполнения IPC. Пользователь делает вызов, я беру все эти параметры и передаю их другому процессу.
Я написал автоматический генератор кода для таких функций на основе логики, который работает примерно так:
Это прекрасно работает, когда у меня есть только простые старые типы данных. Но когда параметры функции не POD, моя логика не работает, потому что:
Может кто-нибудь подсказать, как я могу подойти к этой ситуации?
Вам нужно решить, как сделать сериализацию.
Например. Вы можете определить тип, который представляет сообщение, которым обмениваются стороны, и затем реализовать универсальную функцию, которая сериализует объекты в сообщение. Когда у вас есть собственная логика, вы специализируете функцию сериализации.
вот какой-то псевдокод:
class Message {...} // blah blah
// default imple
template<typename T>
Message& operator <<(Message& msg, T& t) { .. write it as a POD .. }
// specialize for types which need custom logic
Message& operator <<(Message& msg, SomeCustomType& x) { .. custom serialization ..}
Для десериализации нужно сделать подобное для operator >>
, Тогда вы делаете:
Message msg;
MyType whatever = ...
msg << whatever;
// now send msg to other side.
Конечно, вам понадобятся некоторые метаданные в сообщении, чтобы вы знали, как распаковать на другой стороне (т.е. к какому типу).
Существует множество примеров (например, потоки STL или как MFC абстрагирует их с помощью класса CArchive и Serialize
метод на сериализуемых типах)
Других решений пока нет …