對於std::any
和std::variant
我們擁有的功能,要求有關當前包含值的對象,返回nullptr
如果要求不能被滿足(就像dynamic_cast
一樣):std :: any_cast()和std :: get_if(std :: variant)是否需要將指針作爲參數?
template<class ValueType>
const ValueType *any_cast(const any *operand);
template<class ValueType>
ValueType *any_cast(any *operand);
和
template <class T, class... Types>
std::add_pointer_t<T> get_if(variant<Types...> *pv);
template <class T, class... Types>
std::add_pointer_t<const T> get_if(const variant<Types...> *pv);
兩個以指針作爲參數。爲什麼?這不是有效的。該實現每次都檢查參數是否不是nullptr
。 nullptr
爭論是否有意義?
此函數可以是類成員,也可以是引用作爲參數(名稱可能略有不同)。這是不是最理想的設計的原因是什麼?只是模仿dynamic_cast
界面?
您正在使用類型擦除容器並獲取其存儲的值,並且您擔心與'nullptr'比較的性能? –
是的。我擔心每個可避免的開銷。它只是醜陋的界面 –
這些函數的版本以參考爲參數。他們只是拋出失敗(而不是返回'nullptr')。 – Barry