快速的問題:指針的std ::性病載體::向量
是否有可能使該可以引用std::vector<std::vector<int> >
或std::vector<std::vector<double>>
指針?
THX
快速的問題:指針的std ::性病載體::向量
是否有可能使該可以引用std::vector<std::vector<int> >
或std::vector<std::vector<double>>
指針?
THX
如果使用boost是一個選項,您可以使用boost:variant
。從技術上講,它不是一個指針,而是一個類型安全的單件容器,但它應該能夠完成工作,而無需訴諸於使用void*
的「大槍」方式。
如果你必須可以使用聯盟構建
union intordouble
{
int x;
double d;
};
int main()
{
vector<intordouble> v;
return 0;
}
基本上矢量總是工會intordouble的讓你有一個指向它並不需要區分。請看Is it a good practice to use unions in C++?
他們是否有任何使用該禁忌的禁忌? – 2012-01-18 16:09:13
@MatthieuRiegler請參閱我的編輯 – 2012-01-18 16:11:46
如果沒有某種方式知道當前在哪個類型中,則不能使用該聯合。如果任何向量中的所有元素都是相同的類型,則可以向該向量添加一個額外的數據成員以指示它包含的類型。如果你想在單個數組中存儲異構元素,那麼你需要使用(或重新創建)'boost :: variant'。 – 2012-01-18 16:38:47
void*
可以指向任一個,但必須在使用前轉換爲正確的類型。
類型指針只能指向指定的類型,包括從它繼承的類型。 vector
的不同專長是不同的類型,並且不共享公共基類,因此沒有類型化的指針可以指向這兩者。
如果這確實是您認爲需要做的事情,您可以考慮使用區分的聯合,如boost::variant
來保存各種不同的指針類型。
<bad_guy_mode>
typedef std::vector<std::vector<int>>* vvi_ptr;
typedef std::vector<std::vector<double>>* vvd_ptr;
union int_or_double_vecs{
vvi_ptr int_vector;
vvd_ptr double_vector;
};
(請注意,只有一個成員是一次訪問,這是唯一一個你設置最後。)
</bad_guy_mode>
你會想什麼用那個指針呢?即在什麼情況下有一個指針可能指向一個'std :: vector>'或一個'std :: vector >'? –
2012-01-18 15:55:11
你的意思是可以指向其中任何一個的指針嗎? – MikMik 2012-01-18 15:58:37
是的,這就是我的意思! – 2012-01-18 16:02:56