2

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

有什么想法或任何好的方法吗?

4

3 回答 3

5

如果可以选择使用boost 库,我强烈建议使用boost::any

boost::any a(1234567);
boost::any b(12.3456);
boost::any c(12345LL);
boost::any d(true);
于 2013-01-22T17:18:11.597 回答
1

您可以使用字符并将它们转换为几乎任何东西。对于无法通过简单转换“获取”的数据类型,我建议使用 memcpy()。

于 2013-01-22T17:26:52.893 回答
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 对象中,然后再将其添加到队列中。您当然可以通过重载各种赋值运算符来稍微修饰一下,并使使用更加简单。

于 2013-01-22T17:24:56.187 回答