Это связано с обновлением версии браузера Chrome с 64.xx до 65.xx
Теперь у вас есть 2 варианта для успешного выполнения ваших тестов.
Вариант 2 лучше.
template <typename T>
class A {
public:
A(const T &id) : m_id(id) {}
private:
template <typename Ar, typename U> friend void boost::serialization::serialize(Ar&,A<U>&,const unsigned);
T m_id;
};
namespace boost {
namespace serialization {
template <class Archive, typename T>
void serialize(Archive &ar, A<T> &a, const unsigned int)
{
ar & BOOST_SERIALIZATION_NVP(a.m_id);
}
}
}
getRef()
. Для этого не нужны никакие друзья (менее навязчивые), требующие make_nvp
(потому что вы не можете использовать a.getRef()
в качестве имени элемента XML. К сожалению, с ужасным способом инкапсуляции ссылки getter break. Я лично предпочел бы иметь m_id
публичный, в первую очередь. Live On Coliru template <typename T>
class A {
public:
A(const T &id) : m_id(id) {}
T& getRef() { return m_id; }
T const& getRef() const { return m_id; }
private:
T m_id;
};
namespace boost {
namespace serialization {
template <class Archive, typename T>
void serialize(Archive &ar, A<T> &a, const unsigned int)
{
ar & boost::serialization::make_nvp("m_id", a.getRef());
}
}
}
A<>
: template <typename T>
class A {
public:
struct access;
A(const T &id) : m_id(id) {}
private:
T m_id;
};
Это менее навязчиво, чем подход getRef()
, который просто полностью разрушает инкапсуляцию. Теперь вы можете скрыть частный доступ внутри этого класса: namespace boost {
namespace serialization {
template <class Archive, typename T>
void serialize(Archive &ar, A<T> &a, const unsigned int version)
{
A<T>::access::serialize(ar, a, version);
}
}
}
Конечно, вам все равно нужно но это может быть сделано в отдельном заголовке и вообще не влияет на класс A & lt; (или любую его специализацию): template <typename T>
struct A<T>::access {
template <class Archive>
static void serialize(Archive &ar, A<T> &a, const unsigned int) {
ar & BOOST_SERIALIZATION_NVP(a.m_id);
}
};
См. Live On Coliru также Только для дополнительной информации: Чтобы получить первое решение от работы:
Вам нужно переслать метод друзей следующим образом:
// Boost
#include <boost/serialization/access.hpp>
class ClassB;
namespace boost{
namespace serialization {
template <typename Ar> void serialize(Ar&,ClassB&,const unsigned);
}
}
class ClassB: public ClassA{
private:
template <typename Ar> friend void boost::serialization::serialize(Ar&,ClassA&,const unsigned);
public:
ClassA();
virtual ~ClassA();
};
Принял меня в то время, чтобы заставить его работать.
Cheers