wave.state

まだBoost.Waveで引っ張ります。
Boost.Waveのインタラクティブモードには状態の保存/復帰機能があります。
この機能はcpp.cppのBOOST_WAVE_SERIALIZATIONの値を1に変えてビルドすることで利用できるようになります。
ただし、コンパイルエラーとロード処理のバグがあったので少し手を加えました。

Index: cpplexer/cpp_lex_token.hpp
===================================================================
--- cpplexer/cpp_lex_token.hpp	(リビジョン 58616)
+++ cpplexer/cpp_lex_token.hpp	(作業コピー)
@@ -280,6 +280,8 @@
     template<typename Archive>
     void serialize(Archive &ar, const unsigned int version)
     {
+        if (!data)
+            data = new data_type(0);
         data->serialize(ar, version);
     }
 #endif
Index: util/cpp_include_paths.hpp
===================================================================
--- util/cpp_include_paths.hpp	(リビジョン 58616)
+++ util/cpp_include_paths.hpp	(作業コピー)
@@ -482,7 +482,7 @@
         >::type map_type;
     boost::serialization::stl::load_collection<
         Archive, map_type,
-        boost::serialization::stl::archive_input_unique<Archive, map_type>,
+        boost::serialization::stl::archive_input_map<Archive, map_type>,
         boost::serialization::stl::no_reserve_imp<map_type>
     >(ar, t);
 }


状態を保存しておくファイルは「-s」オプションで指定します。
ファイル名が「-」なら、「wave.state」になります。

C:\Boost>wave.exe -s -

Wave: A Standard conformant C++ preprocessor based on the Boost.Wave library
Version: 2.0.3.2941 [Win32/Microsoft Visual C++ version 9.0] (20090602)
>>> #define HOGE 123
>>> ^Z

C:\Boost>wave.exe -s -

Wave: A Standard conformant C++ preprocessor based on the Boost.Wave library
Version: 2.0.3.2941 [Win32/Microsoft Visual C++ version 9.0] (20090602)
>>> HOGE
123
>>> ^Z

C:\Boost>

マクロの名前で分かるとおり、状態の保存にはBoost.Serializationが利用されています。
元ソースではアーカイブXMLを利用していて遅いので、
BOOST_WAVE_BINARY_SERIALIZATIONを1に、BOOST_WAVE_XML_SERIALIZATIONを0に変えて、
バイナリフォーマットを使うようにした方がよいです。
また、Boost.Waveで使っている文字列がstringではないため、バイナリフォーマットの方が中を覗きやすかったりもします。
よく使うヘッダをインクルードしたwave.stateを用意しておくと便利かもしれません。