我尝试在 SystemC 项目中使用 boost 属性树。项目用途:
gcc 4.6.3
systemc 2.2
boost 1.46
标题:
#include <typeinfo>
#include <map>
#include <vector>
#include <string>
#include <exception>
#include <boost/property_tree/ptree.hpp> <-- line 17
class PersistenceProvider
{
static PersistenceProvider* m_instance;
//! private constructor to assure there is one instance
PersistenceProvider();
std::string GetTypePath(const std::string &name) const ;
std::string GetValuePath(const std::string &name)const ;
boost::property_tree::ptree m_ptree;
public:
//! returns the current instance of the persistence provider
static PersistenceProvider* getInstance();
~PersistenceProvider();
template <class T>
T get(std::string path);
template <class T>
void set(std::string path, T data);
};
代码:
template <class T>
T PersistenceProvider::get(const std::string path)
{
const std::string typePath = GetTypePath(path);
std::string type = m_ptree.get<std::string>(typePath);
if(typeid(T).name() != type)
{
assert("wrong type");
}
const std::string dataPath = GetValuePath(path);
return m_ptree.get<T >(dataPath);
}
template <class T>
void PersistenceProvider::set(const std::string path, const T data)
{
std::string type = typeid(T).name();
const std::string typePath = GetTypePath(path);
m_ptree.put<std::string >(typePath, type, true);
const std::string dataPath = GetValuePath(path);
m_ptree.put<T >(dataPath, data, true);
}
但是当我将 property_tree.hpp 添加到我的头文件时,gcc 会抛出以下内容:
In file included from /usr/include/boost/type_traits/is_reference.hpp:17:0,
from /usr/include/boost/type_traits/intrinsics.hpp:132,
from /usr/include/boost/type_traits/alignment_of.hpp:15,
from /usr/include/boost/optional/optional.hpp:24,
from /usr/include/boost/optional.hpp:15,
from /usr/include/boost/property_tree/id_translator.hpp:16,
from /usr/include/boost/property_tree/string_path.hpp:15,
from /usr/include/boost/property_tree/ptree.hpp:16,
from ../src/tb_systemc/../behavior_systemc/PersistenceProvider.h:17,
...
/usr/include/boost/type_traits/is_rvalue_reference.hpp:21:1: error: template argument 1 is invalid
In file included from /usr/include/boost/type_traits/intrinsics.hpp:133:0,
from /usr/include/boost/type_traits/alignment_of.hpp:15,
from /usr/include/boost/optional/optional.hpp:24,
from /usr/include/boost/optional.hpp:15,
from /usr/include/boost/property_tree/id_translator.hpp:16,
from /usr/include/boost/property_tree/string_path.hpp:15,
from /usr/include/boost/property_tree/ptree.hpp:16,
from ../src/tb_systemc/../behavior_systemc/PersistenceProvider.h:17,
...
/usr/include/boost/type_traits/is_volatile.hpp:60:35: error: template argument 1 is invalid
In file included from /usr/include/boost/type_traits/is_member_function_pointer.hpp:25:0,
from /usr/include/boost/type_traits/is_member_pointer.hpp:28,
from /usr/include/boost/type_traits/is_pointer.hpp:24,
from /usr/include/boost/type_traits/is_scalar.hpp:14,
from /usr/include/boost/type_traits/is_pod.hpp:14,
from /usr/include/boost/type_traits/has_trivial_constructor.hpp:14,
from /usr/include/boost/type_traits/has_nothrow_constructor.hpp:12,
from /usr/include/boost/optional/optional.hpp:25,
from /usr/include/boost/optional.hpp:15,
from /usr/include/boost/property_tree/id_translator.hpp:16,
from /usr/include/boost/property_tree/string_path.hpp:15,
from /usr/include/boost/property_tree/ptree.hpp:16,
from ../src/tb_systemc/../behavior_systemc/PersistenceProvider.h:17,
...
/usr/include/boost/type_traits/remove_cv.hpp:44:36: error: template argument 1 is invalid
In file included from /usr/include/boost/optional/optional.hpp:26:0,
from /usr/include/boost/optional.hpp:15,
from /usr/include/boost/property_tree/id_translator.hpp:16,
from /usr/include/boost/property_tree/string_path.hpp:15,
from /usr/include/boost/property_tree/ptree.hpp:16,
from ../src/tb_systemc/../behavior_systemc/PersistenceProvider.h:17,
...
/usr/include/boost/type_traits/type_with_alignment.hpp:206:5: error: ‘found’ is not a type
/usr/include/boost/type_traits/type_with_alignment.hpp:206:5: error: expected ‘,’ or ‘...’ before ‘>=’ token
/usr/include/boost/type_traits/type_with_alignment.hpp:207:5: error: ‘found’ is not a type
/usr/include/boost/type_traits/type_with_alignment.hpp:207:5: error: expected ‘,’ or ‘...’ before ‘%’ token
/usr/include/boost/type_traits/type_with_alignment.hpp:207:5: error: ‘int boost::detail::type_with_alignment_imp<Align>::static_assert(int)’ cannot be overloaded
/usr/include/boost/type_traits/type_with_alignment.hpp:206:5: error: with ‘int boost::detail::type_with_alignment_imp<Align>::static_assert(int)’
...
还有更多人说同样的话..
这发生在包含时间而不是使用时。这可能是由于缺少包含或命名空间引起的吗?