繁体   English   中英

std :: array中的模板类

[英]Template class in std::array

是否可以在std :: array中添加模板类而不指定类型名? 我的意思是。

template<typename T>
class MyClass
{
    ...
}

std::array<MyClass *> arr;

原因是我有一种可以接受从MyClass派生的所有类的存储,但是模板类的问题是我需要指定类型名,然后该类必须像这样:

class Storage
{
    ...
private:
    std::array<MyClass<TYPE GOES HERE> *> arr;
}

我想要这样的东西:

class Storage
{
    ...
private:
    std::array<MyClass *> arr;
}

这样,我可以添加任何派生自MyClass的类。

有办法吗?

一种选择是创建一个派生MyClass的基类,并让数组存储指向该基类的指针。

struct MyBase
{
   virtual ~Base() {}
};

template<typename T>
class MyClass : public MyBase
{
    ...
}

std::array<MyBase*> arr;

原因是我有一种可以接受从MyClass派生的所有类的存储

您不能创建派生自MyClass的类,而可以创建派生自MyClass<int> ,例如,等等。因此,我看到的解决方案是:

  • 使模板MyClass从非模板BaseClass派生,并保持指向BaseClass指针
  • 使MyClass非模板,并创建一个从其派生的模板类。 (技术上与第一个相同)
  • 保留void *并在使用时将其MyClass<>为特定的MyClass<> ,但这很容易出错,因此不建议这样做。
  • 使用boost::anyboost::variant (使用boost::variant会很复杂

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM