C++ 将boost::variant传递到(从)dll安全吗?

C++ 将boost::variant传递到(从)dll安全吗?,c++,boost,variant,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

考虑一下这个代码

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;
};
typedef boost::variant变量;
//此接口类将在DLL中实现
阶级制作人
{
公众:
虚拟变量product()=0;
};
//该类将由DLL用户和
//指向此类对象的指针将传递给生产者
//as回调接口
类生成\u处理程序
{
公众:
虚空句柄生成(常量变量&)=0;
};

众所周知,通过动态库边界传递STD对象通常是不安全的。那么boost类型,尤其是variant呢?

如果您可以保证所有涉及的模块共享相同的工具链/选项(即ABI),那么就不会有真正的问题

尽管如此:

此外,如果您知道“other”模块除了存储并将引用传递回调用方之外,永远不会执行任何操作,那么也不会有问题

一旦您开始通过值传递这些内容和/或间接指向“外部”模块中的引用/指针,我会说您需要非常确定您的平台支持并测试它



[1]独立问题之外,例如跨共享库边界抛出/捕获异常的能力;这与bot相关,不仅限于
任何
(或通常的RTTI)

boost与std的问题相同。始终取决于编译器/编译器版本/boost版本。此外,在
变量
中有一个
std::string
:您认为
变量
有多神奇?