При использовании макроса BOOST_SERIALIZATION_NVP
для создания пары имя-значение для сериализации XML компилятор с радостью позволяет скомпилировать следующий код, хотя имя элемента не является допустимым XML элемент и исключение брошено при попытке фактически сериализовать объект в XML:ускорить сериализацию макросов NVP и символов не-XML-элементов
BOOST_SERIALIZATION_NVP(_member[index])
очевидное исправление заключается в использовании:
boost::serialization::make_nvp("ValidMemberName", _member[index])
Но кто может предложить способ изменить импульс так, что незаконнорожденный элемент имена будут вызывать компиляцию n ошибка? (Таким образом, не полагаясь на модульное тестирование, чтобы поймать выше тонкого бага)
Edit:
Одна идея состоит в том, чтобы как-то объявить фиктивный локальную переменную с именем элемента, переданного в макрос, предполагая, что набор допустимых идентификаторов в C++ является подмножеством действительных элементов XML. Не все уверены, что это можно сделать.
Это приведет к ошибке времени выполнения 'what(): Недопустимое имя тега XML. – alfC