传递多种数据类型的最佳方式

时间:2013-01-22 17:15:58

标签: c++ plugins frameworks

我正在编写一个插件框架,该插件应该将数据传递给应用程序,我创建了一个插件放置数据的队列,但我希望插件可以传递多种数据类型(int,bool,char ,...)而不仅仅是一个。

任何想法或任何好方法吗?

3 个答案:

答案 0 :(得分:5)

如果使用boost library是一个选项,我强烈建议您使用boost::any

boost::any a(1234567);
boost::any b(12.3456);
boost::any c(12345LL);
boost::any d(true);

答案 1 :(得分:1)

使用模板和其他通用编程技术作为设计的一部分。

以下是模板的入门名单: http://www.cplusplus.com/doc/tutorial/templates/

使用boost any是最值得推荐的,但我认为从设计角度来看比我当前接受的答案(如果你想最小化依赖关系)更好的替代方案是以下非常简单的模板包装器实现,它接受并返回任何类型:

class IAnyType {}

template <class T>
class AnyType : public IAnyType
{
private:
    T value_;
public:
    AnyType(T value) : value_(value) {}

    void set(T value) { value_ = value; }

    T get() { return value_; }
};

然后,只需让队列保存IAnyType对象,并将所有参数存储在AnyType对象中,然后再将其添加到队列中。你可以通过重载各种赋值运算符来使这一点变得更加复杂,并且使用更简单。

答案 2 :(得分:1)

您可以使用字符并将它们投射到几乎所有内容中。对于数据类型,你不能通过简单的转换“到达”我建议使用memcpy()。