diff --git a/Makefile b/Makefile index 57582ca2..a9cd1d48 100644 --- a/Makefile +++ b/Makefile @@ -1,11 +1,14 @@ CPPFLAGS=-std=c++11 -I./include -Wall -Werror -CC=clang++ +CC=g++ -all: unittests sandbox performance +all: unittests sandbox performance sandbox_rtti sandbox: sandbox.cpp ${CC} sandbox.cpp -o sandbox ${CPPFLAGS} +sandbox_rtti: sandbox_rtti.cpp + ${CC} sandbox_rtti.cpp -o sandbox_rtti ${CPPFLAGS} + unittests: unittests.cpp time ${CC} unittests.cpp -o unittests -lboost_unit_test_framework ${CPPFLAGS} time ./unittests --show_progress @@ -14,4 +17,4 @@ performance: performance.cpp ${CC} performance.cpp -o performance -lboost_serialization ${CPPFLAGS} -O3 clean: - rm sandbox; rm unittests; rm performance; + rm sandbox; rm unittests; rm performance; rm sandbox_rtti; diff --git a/include/cereal/cereal.hpp b/include/cereal/cereal.hpp index baca2e3b..be5dfd5a 100644 --- a/include/cereal/cereal.hpp +++ b/include/cereal/cereal.hpp @@ -31,6 +31,7 @@ #include #include #include +#include #include #include diff --git a/sandbox_rtti.cpp b/sandbox_rtti.cpp new file mode 100644 index 00000000..b80e408a --- /dev/null +++ b/sandbox_rtti.cpp @@ -0,0 +1,87 @@ +/* + Copyright (c) 2013, Randolph Voorhies, Shane Grant + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of cereal nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +class Base +{ + public: + Base() = default; + + virtual void foo() {} + + template + void serialize( Archive & ar ) + { + std::cout << "Base serialize" << std::endl; + ar(x); + } + int x; +}; + +class Derived : public Base +{ + public: + Derived() = default; + + virtual void foo() {} + + template + void serialize( Archive & ar ) + { + std::cout << "Derived serialize" << std::endl; + ar( cereal::base_class(this), y ); + } + int y; +}; + + +int main() +{ + std::cout << std::boolalpha; + + std::stringstream os; + cereal::BinaryOutputArchive archive(os); + + std::unique_ptr b( new Derived() ); + + archive( b ); +}