Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Boost::Variant或Boost::Any而不是序列化_C++_Boost_Variant - Fatal编程技术网

C++ Boost::Variant或Boost::Any而不是序列化

C++ Boost::Variant或Boost::Any而不是序列化,c++,boost,variant,C++,Boost,Variant,我的情况是,我需要将不同类型的结构从底部组件传递到更高的组件(通过更多)。接口应该是通用的,例如“notify”方法或类似方法,我需要将其与类型a、B、C和D一起使用。 例如: notify(A()); notify(b); notify(otherObject->getC()); notify(d); 可能会有更多的对象类型,所以我不想为每种类型的通知对象重载“notify” 我想我可以在底层组件中使用某种序列化机制,然后在高层组件中取消序列化对象。但是,它需要一些性能。 那增压型呢?

我的情况是,我需要将不同类型的结构从底部组件传递到更高的组件(通过更多)。接口应该是通用的,例如“notify”方法或类似方法,我需要将其与类型a、B、C和D一起使用。 例如:

notify(A());
notify(b);
notify(otherObject->getC());
notify(d);
可能会有更多的对象类型,所以我不想为每种类型的通知对象重载“notify”

我想我可以在底层组件中使用某种序列化机制,然后在高层组件中取消序列化对象。但是,它需要一些性能。 那增压型呢?与“notify”方法中的对象一起,我可以发送指定对象类型的枚举,以便更高的组件知道变量中的类型,并能够将其解包

你觉得怎么样


或者有更好的方法吗?

这正是
boost::variant
的设计目的。实际上,您拥有的是一个带有单个
notify
函数的函数,该函数接受一个复合类型的值,即“类型a或B或C或D的值”。谢谢。我也这么认为。缺点是这种设计很快变得不稳定,这是因为比较boost::any的问题。我无法编写gtest测试用例并检查是否使用了正确的参数或返回值。这正是
boost::variant
的设计目的。实际上,您拥有的是一个带有单个
notify
函数的函数,该函数接受一个复合类型的值,即“类型a或B或C或D的值”。谢谢。我也这么认为。缺点是这种设计很快变得不稳定,这是因为比较boost::any的问题。我无法编写gtest测试用例并检查是否使用了正确的参数或返回值。