Ich glaube, Sie dies ohne Splitting tun, was der übliche Weg wäre:
if (Archive::is_saving::value)
doSomething();
Diese von der Basis-Schnittstelle, die die Verwendung Archiv geerbt wird, in boost/archive/detail/interface_[ia]archive.hpp
Der folgende Code zeigt, dass es scheint, mit 1,42
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/xml_oarchive.hpp>
#include <boost/archive/xml_iarchive.hpp>
// oarchive:
//text
static_assert(!boost::archive::text_oarchive::is_loading::value, "out is loading");
static_assert(boost::archive::text_oarchive::is_saving::value, "out isn't saving");
//xml
static_assert(!boost::archive::xml_oarchive::is_loading::value, "out is loading");
static_assert(boost::archive::xml_oarchive::is_saving::value, "out isn't saving");
// iarchive:
//text
static_assert(boost::archive::text_iarchive::is_loading::value, "out is loading");
static_assert(!boost::archive::text_iarchive::is_saving::value, "out isn't saving");
//xml
static_assert(boost::archive::xml_iarchive::is_loading::value, "out is loading");
static_assert(!boost::archive::xml_iarchive::is_saving::value, "out isn't saving");
eine vernünftige Lösung zu sein ich so aber ein bisschen vorsichtig, sich auf etwas sein würde - mehrere in Heritance könnte es brechen, wenn jemand ein Archiv schrieb, das sowohl Eingabe als auch Ausgabe und tut es mir nicht klar ist, wie dauerhaft und öffentlich dieser Teil der Schnittstelle gemeint ist.
Wenn es Ihnen nichts ausmacht, die Logik in zwei Funktionen zu teilen, werfen Sie einen Blick auf http://www.boost.org/doc/libs/1_47_0/libs/serialization/doc/serialization.html#splitting – Ammar