[serialization] broken in 1.36

Dear all,
yesterday we upgraded to vstudio 2008 and Boost 1.36. However it seems that
the serialization library gives a STATIC_WARNING now. the code uses a
shared_ptr of a data structure which has no virtual function. This was ok in
Boost 1.34 and I don't see why this should be wrong:
#include "stdafx.h"
#include <sstream>
#include

Hi,
I've got some code which needs to call a template function on different
objects (potentially in a for loop). I'm currently doing this using an
array of function ptrs but like the idea of an array of types.
template<class T>
bool func( std::string& id )
{
return T::dothing( id );
}
int main()
{
const int countOfTypes = 3;
boost::function< bool (std::string& )> funcs[countOfTypes] =
{ boost::bind( func<Obj1>, _1
),
boost::bind( func<Obj2>, _1
),
boost::bind( func<Obj3>, _1
) };
for( int i = 0; i < countOfTypes; ++i )
{
funcs[i]( "testid" );
//would prefer
//func

AMDG Patrick Loney wrote:
I've got some code which needs to call a template function on different objects (potentially in a for loop). I'm currently doing this using an array of function ptrs but like the idea of an array of types. <snip>
I believe this should be possible using the pre-processor or meta programming parts of boost but have no experience of either and was hoping for some pointers. Is it possible and is it, IYO, better than the function pointer method I'm currently using?
boost::mpl::for_each does what you want
http://www.boost.org/doc/libs/1_36_0/libs/mpl/doc/refmanual/for-each.html
(untested):
template<class T>
struct wrap {};
struct func_f {
typedef void result_type;
template<class T>
void operator()(const wrap<T>&, const std:;string& s) const {
func<T>(s);
}
};
int main() {
boost::mpl::for_each

Hmm - it would be wrong if DataPtr was the base class part of derived class pointer. Perhaps the warning is over-zealous - would have to think about this. Robert Ramey gast128 wrote:
Dear all,
yesterday we upgraded to vstudio 2008 and Boost 1.36. However it seems that the serialization library gives a STATIC_WARNING now. the code uses a shared_ptr of a data structure which has no virtual function. This was ok in Boost 1.34 and I don't see why this should be wrong:
#include "stdafx.h" #include <sstream> #include
#include #include #include struct Data { std::string m_str; };
template <class Archive> void serialize(Archive& ar, Data& r, const unsigned int /*version*/) { ar & BOOST_SERIALIZATION_NVP(r.m_str); }
struct DataStorage { template <class Archive> void serialize(Archive& ar, const unsigned int /*version*/) { ar & BOOST_SERIALIZATION_NVP(m_ptrBla); }
private: //data typedef boost::shared_ptr<Data> DataPtr;
DataPtr m_ptrBla; };
int _tmain() { DataStorage data; std::stringstream sstr;
//boost::archive::xml_oarchive oa(sstr); //oa << boost::serialization::make_nvp("bla", data);
boost::archive::xml_iarchive ia(sstr); ia >> boost::serialization::make_nvp("bla", data);
return 0; }
It gives warning c4099 where '<---':
const extended_type_info * get_derived_extended_type_info(const T & t) const { // note: this implementation - based on usage of typeid (rtti) // only does something if the class has at least one virtual function. BOOST_STATIC_WARNING(boost::is_polymorphic<T>::value); //<--- return
detail::extended_type_info_typeid_0::get_extended_type_info( typeid(t) );

Robert Ramey
Hmm - it would be wrong if DataPtr was the base class part of derived class pointer. Perhaps the warning is over-zealous - would have to think about this.
ok. In the mean time I will disable it with BOOST_DISABLE_STATIC_WARNINGS. Btw these warnings and errors probably have to do getting metadata information from c++ datatypes? In .NET I was surprised that it was so easy to binary- serialize an object structure even one containign graph cycles. But now I am probably offending a lot of readers here...
participants (4)
-
gast128
-
Patrick Loney
-
Robert Ramey
-
Steven Watanabe