,如果我有一個模板:存儲和重新使用decltype值?
template <class T>
struct Item
{
T _value;
};
然後我就可以做:
// ...
Item<int> x = { 42 }; // declared as an int
// ...
decltype(x._value) y = 20; // 'y' is also an int
但有可能給decltype
存儲到一個變量,這樣以後可以用嗎?
爲什麼?
我想存儲項目的值作爲指針。
喜歡的東西std::vector<Item*>
而是以自己的模板,我必須將它們存儲爲指針void
:
std::vector<void*> is;
is.push_back(new Item<int>());
is.push_back(new Item<double>());
is.push_back(new Item<float>());
而這一切,但是當談到時間刪除指針我需要重新鑄造我void*
回到正確的類型(所以析構函數調用):
delete (Item<int>*)is[0];
如果我知道是什麼類型,我可以這樣做:
delete (Item<decltype(whatever)>*)is[0];
因此,我需要存儲decltype
的原因。
我希望這是有道理的。
你應該看看Boost.variant和Boost.any(或他們的C++ 17的同行['標準:: variant'(HTTP:// EN。 cppreference.com/w/cpp/utility/variant)和['std :: any'](http://en.cppreference.com/w/cpp/utility/any))。他們可能是你需要的更好的實現。 –
類型擦除是關鍵字,在C中用'void *'完成,在C++中用'std :: any'和訪問者模式完成。智能指針解決方案實際上在內部使用某種類型的擦除。 – alfC
@alfC請注意,類型刪除是在編譯時執行的,而訪問者模式背後的基本思想是雙重調度,即運行時機器。 – skypjack