如何创建一个包含类型尚不知道的值的类?
How to make a class that holds a value whose type isn't know yet?
我想有一个类,它包含一个类型可以变化的数据成员。比如:
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
流值,将其添加到另一个值,…),您可以捕获这些操作指针函数模板实例化,或通过实例化一个类模板的业务覆盖基类的方法,这样你的容器可以存储一个指向基类的指针使用运行时多态和分派。
相关文章:
- MSVC 在不知道类型的情况下评估上下文(和错误)
- 我们可以在不知道其真实类型的情况下将基类指针转换为派生类指针吗?
- 表达式必须具有类类型。不知道怎么解决
- msgpack:在不知道类型的情况下解包自定义类
- 在不知道其类型的情况下使用多个对象的相同方法
- 基类到派生模板类的强制转换指针,而不知道类型
- std::矢量插入,不知道元素的类型
- 我不知道如何调用参数为节点类型的函数
- 当我们不知道类型的大小时,如何为它分配内存?
- 重载模板化 lambda,而不知道非模板化参数的参数类型
- 动态C++与其他语言的比较 - 在不知道类型的情况下无法在对象上调用方法
- 不知道派生类型的静态CRTP类
- 为什么C++不知道TIMESTAMP_STRUCT类型
- 如何在不知道特定类型的情况下引用变量
- 是否可以在不知道类型的情况下调用析构函数
- 在不知道类型opencv的情况下访问矩阵值
- c++boost::任何在不知道类型的情况下使用该值的操作
- 当我不知道类型时如何将参数传递给函数
- 模板指针,而不知道类型
- 从模板类继承而不知道类型的c++类