[英]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::any
或boost::variant
(使用boost::variant
會很復雜
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.