我知道它不是默认的,也许不是首选使用Boost属性树的方法。但似乎所有人都需要创建命名指针树。所以我试过了:
#include <boost/property_tree/ptree.hpp>
#include <iostream>
#include <string>
template <class T>
int append(T val)
{
std::cout << "hello";
return 0;
}
int main()
{
using boost::property_tree::ptree;
ptree pt;
pt.put("function-int-pointer", &append<int>);
(pt.get("function-int-pointer", NULL))(123);
// ^-- error C2064: term does not evaluate to a function taking 1 arguments
(pt.get<int(*)(int)>("function-int-pointer"))(123);
// ^-- error C2678: binary '>>' : no operator found which takes a left-hand
// operand of type 'std::basic_istream<_Elem,_Traits>' (or there is no
// acceptable conversion)
}
如果有可能我会喜欢自动恢复(简单.get()
而非.get<T>
)
它似乎可以存储指向函数的指针(主要的共鸣我想使用它)。但是我无法从中获取它们(所以我想知道如何在Boost属性树中存储指针以便它可以自动恢复?
答案 0 :(得分:2)
我打算在这里回答这个问题的要点。我想你也可能对Boost Serialization满意吗?
Boost序列化是一个非常强大的通用序列化库,能够序列化到
它完全支持各种数据类型 1 - 虽然不适用于开箱即用的函数指针。但是,由于它的可扩展性,Peter Dimov came up提供了一种按名称序列化函数的方法,手动注册函数。在草图中,看起来像:
template<class T> void register_static( T * pt, std::string const & name )
{
// add to name<->address maps
}
template<class T> void save(T * const & pt)
{
// look up the name of pt and save
}
template<class T> void load(T * & t)
{
// load name, look up address, store in pt
}
请注意,T可以是任何可调用类型
std::less()
)然而,重要的是,要按名称注册可调用类型的每个实例,因为地址不是单独实例的sam。
<子> 1 标准容器,指针,具有内部(指针)引用的数据结构,别名指针,循环树等。 子>