将boost :: variant传递给(from)dll是否安全?

时间:2014-03-27 12:39:49

标签: c++ boost variant

考虑这段代码

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对象通常是不安全的。那么提升类型,尤其是变体?​​

1 个答案:

答案 0 :(得分:1)

如果您能保证所涉及的所有模块共享相同的工具链/选项(即ABI),那么应该没有真正的麻烦 [1]

无论如何:

另外,如果你知道&#34;其他&#34;模块永远不会做任何事情,除了存储并将引用传递给调用者,那么也不应该是一个问题。

一旦你开始按值传递这些东西和/或将参考/指针指向&#34;外来&#34;模块我说你需要非常确定你的平台支持这个并测试它。


[1] 在单独的问题之外,例如跨共享库边界抛出/捕获异常的能力;这是相关的机器人,不仅限于any(或一般的RTTI)