我的問題如下:我想將兩個(不多於)不同的數據類型作爲值放入映射中。不同數據類型作爲值的C++映射
typeX A, B, ...;
typeY Z, Y, ...;
void func (typeX) { ... }
void func (typeY) { ... }
std::map <std::string, what_to_put_here?? >map;
map["a"] = A;
map["z"] = Z;
...
std::vector<std::string> list;
//this list will be sth. like "a", "y", ...
for (unsigned int i = 0; i < list.size(); ++i)
func(map[list[i]])
很明顯,這不起作用,因爲地圖只接受一種數據類型的值。當循環「list」時,由於map [list [i]]的類型是已知的,因此對「func」的調用應該是明確的。
我想避免顯式類型轉換或類型檢查,即某事像
if (typeid(map[list[i]]).name() == "typeX")
func(map[list[i]])
else if (typeid(map[list[i]]).name() == "typeY")
func(map[list[i]])
你能告訴我,如果這是可能的嗎?同樣,它將僅限於兩種不同的數據類型。謝謝!
我會做的包裝類有兩個成員變量和地圖聲明中使用它。 –
[boost :: variant](http://www.boost.org/doc/libs/1_55_0/doc/html/boost/variant.html)可能會有所幫助。 – user2079303
你有沒有考慮過製作一個公共基類的'typeX'和'typeY'子類? –