簡體   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