是否可以std::function在C++中序列化和反序列化a ,函数对象或闭包?怎么样?C++ 11是否有助于此?是否有任何图书馆支持可用于此类任务(例如,在Boost中)?
例如,假设一个C++程序std::function需要与另一台机器上的另一个C++程序进行通信(比如通过TCP/IP套接字).在这种情况下你有什么建议?
为了澄清,要移动的功能应该是纯粹的,没有副作用的.所以我没有安全性或状态不匹配问题.
该问题的解决方案是构建一个小的嵌入式域特定语言并序列化其抽象语法树.我希望我能找到一些语言/库支持来代替移动与机器无关的函数表示.
在不使用Boost的情况下,在以下代码中编写readvals函数的最佳方法是什么?基本上,它应该得到一个元组,调用它的elemets的特定函数,并将生成的结果再次作为元组返回.
是否有基于C++ 0X的元组Functor定义库?
template <class T>
struct A
{
A(T _val):val(_val){}
T ret() {return val;}
T val;
};
template <typename... ARGS>
std::tuple<ARGS...> readvals(std::tuple<A<ARGS>...> targ)
{
//???
}
int main(int argc, char **argv)
{
A<int> ai = A<int>(5);
A<char> ac = A<char>('c');
A<double> ad = A<double>(0.5);
std::tuple<A<int>,A<char>,A<double>> at = std::make_tuple(ai,ac,ad);
// assuming proper overloading of "<<" for tuples exists
std::cout << readvals<int,char,double>(at) << std::endl;
// I expect something like (5, c, 0.5) in the output
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我在SO上发现了一些问题,这些问题部分地解决了这个问题(元组解包,迭代元组元素等),但在我看来,与将所有这些解决方案放在一起相比,应该有一个更简单的解决方案.