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

How to make a class that holds a value whose type isn't know yet?

本文关键字:不知道 类型 一个 何创建 创建 包含      更新时间:2023-10-16

我想有一个类,它包含一个类型可以变化的数据成员。比如:

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

在调用push()之前不知道类型。我该怎么做呢?

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

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

根据您的确切需求,以下解决方案接近:

    实现一个类模板。实例化类模板以获取
  • 使用指针或引用作为数据成员

两种解决方案都有不足之处;

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

如果您可能需要存储任何类型,但后来在检索只需要执行某些操作的值(例如,std::ostream流值,将其添加到另一个值,…),您可以捕获这些操作指针函数模板实例化,或通过实例化一个类模板的业务覆盖基类的方法,这样你的容器可以存储一个指向基类的指针使用运行时多态和分派。