Cela ne fonctionne pas:Pourquoi je ne peux pas avoir std :: optionnel <T> où T est abstrait?
struct Type {
virtual bool func(const std::string& val) const noexcept = 0;
}
// in main
optional<Type> = some_function_returning_optional_type();
et échoue avec un message d'erreur:
error: cannot declare field 'std::experimental::fundamentals_v1::_Optional_base<Type, false>::<anonymous union>::_M_payload' to be of abstract type 'Type'
Modification du Type
d'avoir une marche fonction non-pure, mais ne convient pas dans ce cas, car il ne peut pas être une instance de Type
dans mon code, seules les classes qui en héritent devraient pouvoir exister.
Comment pouvez-vous même instancier le type abstrait à mettre en option? Si vous êtes en train d'instancier un type concret, mais que vous utilisez un pointeur vers le type abstrait, vous pouvez placer un pointeur (ou un pointeur intelligent) dans votre option. Notez cependant que vous avez seulement besoin d'un optionnel si 'nullptr' n'est pas suffisant et que vous devez gérer un cas spécial quand même un' nullptr' n'a pas pu être créé. – AMA