Хорошо так в основном:подталкивания Сериализация ошибки компиляции, ужасно смущен
у меня есть этот простой пример:
main.cpp
using namespace VHGO::Resource;
std::list<BaseTable*> tableList;
BigTable* bt1 = new BigTable();
HRESULT hr = S_OK;
hr = bt1->Add(L"TEXTURE", L"..\\Data\\ground.png");
tableList.push_back(bt1);
std::wofstream ofs3(L"VHGOSatData.bif");
boost::archive::xml_woarchive outArch3(ofs3);
outArch3 & BOOST_SERIALIZATION_NVP(tableList);
И мои классы сериализации
namespace VHGO
{
typedef std::wstring String;
typedef std::map<VHGO::String, VHGO::String> PropertyMap;
namespace Resource
{
class BaseTable
{
friend class boost::serialization::access;
friend std::wostream& operator<<(std::wostream& os, const BaseTable& b);
private:
template<class Archive>
void save(Archive& ar, const unsigned int version) const {}
template<class Archive>
void load(Archive& ar, const unsigned int version) {}
public:
BaseTable()
{
}
//for boost
virtual ~BaseTable()
{
}
virtual HRESULT Add(__in const VHGO::String&, __in const VHGO::String&) = 0;
virtual HRESULT Remove(__in const VHGO::String&) = 0;
virtual HRESULT Get(__in const VHGO::String&, __out VHGO::String&) = 0;
};
std::wostream& operator<<(std::wostream& os, const BaseTable& b)
{
UNREFERENCED_PARAMETER(b);
return os;
}
//////////////////////////////////////////////////////////////////////////////////////////
class BigTable : public BaseTable
{
friend class boost::serialization::access;
private:
VHGO::PropertyMap m_Values;
template<class Archive>
void serialize(Archive& ar, const unsigned int version)
{
boost::serialization::split_member(ar, *this, version);
}
template<class Archive>
void save(Archive& ar, const unsigned int version) const
{
UNREFERENCED_PARAMETER(version);
ar << boost::serialization::base_object<const VHGO::Resource::BaseTable>(*this);
ar << boost::serialization::make_nvp("bigtable", m_Values);
}
template<class Archive>
void load(Archive& ar, const unsigned int version)
{
UNREFERENCED_PARAMETER(version);
ar >> boost::serialization::base_object<BaseTable>(*this);
ar >> boost::serialization::make_nvp("bigtable", m_Values);
}
// BOOST_SERIALIZATION_SPLIT_MEMBER()
public:
BigTable(__in const VHGO::PropertyMap& propMap)
: m_Values(propMap)
{
}
BigTable()
{
}
virtual ~BigTable()
{
}
HRESULT Add(__in const VHGO::String& propKey, __in const VHGO::String& propValue)
{
//itadds
return S_OK;
}
HRESULT Remove(__in const VHGO::String& propKey)
{
/*insertchecking*/
return S_OK;
}
HRESULT Get(__in const VHGO::String& key, __out VHGO::String& aValue)
{
aValue = m_Values[key];
return S_OK;
}
VHGO::PropertyMap GetPropertyMap()
{
return m_Values;
}
};
Что является причиной этого, ив прошел через документы, и я могу сделать примеры boost k штраф. Но я не могу сделать эту работу. Я искал вокруг, несколько раз и нашел смешанные результаты. Но я в значительной степени в темноте.
Ошибка компиляции заключается в следующем:
Error 1 error C2664: 'boost::mpl::assertion_failed' : cannot convert parameter 1 from 'boost::mpl::failed ************boost::serialization::is_wrapper<T>::* ***********' to 'boost::mpl::assert<false>::type'
им с помощью VC9.0, и используя подталкивание 1,41.
Есть ли у кого-нибудь идеи?
EDIT
Добавлено обертка, как предложено
имен подталкивание { имен сериализации { шаблон <> структура is_wrapper : MPL :: true_ {}; } // пространство имен сериализации } // пространство имен подталкивание
Тем не менее, приводит к следующей ошибке
1>d:\wrkspace\Sources\External\boost\boost/archive/basic_xml_oarchive.hpp(87) : error C2664: 'boost::mpl::assertion_failed' : cannot convert parameter 1 from 'boost::mpl::failed ************boost::serialization::is_wrapper<T>::* ***********' to 'boost::mpl::assert<false>::type'
1> with
1> [
1> T=const std::list<VHGO::Resource::BaseTable *>
1> ]
1> No constructor could take the source type, or constructor overload resolution was ambiguous
1> d:\wrkspace\Sources\External\boost\boost/archive/detail/interface_oarchive.hpp(64) : see reference to function template instantiation 'void boost::archive::basic_xml_oarchive<Archive>::save_override<T>(T &,int)' being compiled
1> with
1> [
1> Archive=boost::archive::xml_woarchive,
1> T=std::list<VHGO::Resource::BaseTable *>
1> ]
EDIT 2
я сдалась и попытался это на НКУ, и она отлично работает. К сожалению, мне абсолютно необходимо, чтобы он работал на VS2008, который является стандартом на работе.
Вы посмотрели исходный код форсирования вокруг неудавшегося утверждения? Когда у меня было утверждение в библиотеке сериализации boost, был хороший комментарий, который объяснил, что я делаю неправильно. – Eld
Скудно, похоже, ничего ценного. :( Я схожу с ума сойти с ума. – UberJumper
Похоже, эта часть повышения просто не работает с вашим компилятором. Попробуйте список рассылки boost? Вы также можете попробовать последнюю версию (или даже версию), если у вас еще нет. –