나는 추상 유형의 선택적 객체를 갖고 싶습니다. 그러나, 부스트 : : 선택 추상 유형의 실패 : 그냥 하나 실행 가능한 솔루션을하지 않는 것 포인터를 사용하여boost :: optional abstract 클래스 유형
error: invalid new-expression of abstract class type ‘A’
에
#include <boost/optional.hpp>
class A {
virtual int getInt() = 0;
};
class B : public A {
int getInt() { return 666; };
};
int main() {
boost::optional<A> maybeAnA;
boost::optional<A> another(maybeAnA);
};
결과, 몇 가지 기능이 포함 된 개체를 반환해야하므로 함수의 호출자가 해당 멤버 변수의 소유자가 될 것이라고 예상하는 것은 아니지만 멤버 인 선택적 값.
포인터 및 소유권에 관해서는 포인터의 "소유권"을 양도 가능하게하려면 왜 사용하지 않을까요? ['std :: unique_ptr'] (http://en.cppreference.com/w/cpp/memory/unique_ptr) (또는 부스트 상당)? –
만약'optional'이 타입의 컨테이너처럼 작동하게하려면'unique_ptr '을 사용해야합니다. (이미 nullable, transferrable이며 자원을 소유하고 있습니다). – sehe