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



考虑以下代码

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

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

无论如何:

同样,如果你知道"other"模块永远不会做任何事情,除了存储和传递一个引用给调用者,那么也不应该有问题。

一旦你开始通过值传递这些东西和/或在"外部"模块中间接引用/指针,我想说你需要非常确定你的平台支持这个并测试它。


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

相关内容

  • 没有找到相关文章

最新更新