考虑这段代码
typedef boost::variant<int, std::string> var_t;
// this interface class will be implemented in DLL
class producer
{
public:
virtual var_t produce() = 0;
};
// this class will be implemented by DLL user and
// pointer to object of this class will be passed to producer
// as callback interface
class produce_handler
{
public:
virtual void handle_produce(const var_t&) = 0;
};
众所周知,通过动态库边界传递STD对象通常是不安全的。那么提升类型,尤其是变体?
答案 0 :(得分:1)
如果您能保证所涉及的所有模块共享相同的工具链/选项(即ABI),那么应该没有真正的麻烦 [1] 。
无论如何:
另外,如果你知道&#34;其他&#34;模块永远不会做任何事情,除了存储并将引用传递给调用者,那么也不应该是一个问题。
一旦你开始按值传递这些东西和/或将参考/指针指向&#34;外来&#34;模块我说你需要非常确定你的平台支持这个并测试它。
[1] 在单独的问题之外,例如跨共享库边界抛出/捕获异常的能力;这是相关的机器人,不仅限于any
(或一般的RTTI)