使用std :: optional <A>作为A类的类成员

问题描述

为什么不能在类A中定义类型为std :: optional 的类成员?

示例:

#include <optional>

class A {
public:
    A(std::optional<A> optional = {}) : optional_(optional) { }
    ~A() = default;
private:
    std::optional<A> optional_;
};

编译器错误

error: incomplete type 'A' used in type trait expression
   : public integral_constant<bool,__is_trivially_destructible(_Tp)> {};
                                    ^
error: incomplete type 'A' used in type trait expression
   : public integral_constant<bool,__is_constructible(_Tp,_Args...)>
                                    ^

解决方法

=IF(LEN(F7*1)<3,IF(H7 < -3,0.9*F7,IF(H7 < 3,F7,F7*.95)),0.95*F7,F7*1.01))) 要求optional<T>是完整类型(因此具有已知大小)。在类T的定义完成之前,A是不完整的类型。因此是错误。

由于A 本身具有类型{{的成员变量,因此,T不能拥有类型optional<T>的成员变量。 1}}。您可以堆分配optional<T>(或仅分配T,因为您要存储的指针可能是optional<T>)。