如何创建一个包含类型尚不知道的值的类?

时间:2014-05-20 00:53:15

标签: c++ templates

我希望有一个包含数据成员类的类可以改变。类似的东西:

struct container
{
    void push( auto x );
private:
    auto m_x;
};

在我致电push()之前,我们不知道该类型。我该怎么做?

3 个答案:

答案 0 :(得分:4)

template<typename T>
struct container
{
    void push(T x);
private:
    T m_x;
};

答案 1 :(得分:1)

您可以尝试使用boost::any,它允许您存储任何类型,但后来的检索和使用必须知道实际类型(它可能会尝试特定类型,通过潜在类型列表...)

如果您可能需要存储任何类型但稍后在检索期间只需要对该值执行某些操作(例如,将值传输到std::ostream,将其添加到另一个此类值,...) ,您可以捕获这些操作作为函数模板实例化的指针,或者通过实例化操作覆盖基类方法的类模板,这样您的容器可以存储指向基类的指针并使用运行时多态性进行调度。

答案 2 :(得分:1)

在C ++中,不可能实现一个包含类型可以变化的数据成员的类。

根据您的具体需求,以下解决方案非常接近:

  • 实现类模板。实例化类模板以获取 你需要的课程。
  • 使用指针或引用作为数据成员。

这两种解决方案都以这种或那种方式不足;这取决于哪一个更适合的确切问题。