cppyy는 스마트 포인터를 포함하는 클래스를 상속합니다.

이니스프리

다음은 스마트 포인터를 포함하는 클래스에서 상속하는 간단한 예입니다. 우리는 그것에 대해 아무것도하지 않고 단지 선언합니다.

import cppyy

cppyy.cppdef("""
  class Example { 
   private:
    std::unique_ptr<double> x;
   public:
    Example() {}
    virtual ~Example() = default;
    double y = 66.;
   };
  """)

class Inherit(cppyy.gbl.Example):
    pass

 a = Inherit()
 print(a.y)  # Test whether this attribute was inherited

예제가 실행되지만 스마트 포인터에 대한 오류가 있습니다.

input_line_19:9:43: error: call to implicitly-deleted copy constructor of '::Example'
  Dispatcher1(const Dispatcher1& other) : Example(other), m_self(other.m_self, this) {}
                                          ^       ~~~~~
input_line_17:4:29: note: copy constructor of 'Example' is implicitly deleted because field 'x' has a deleted copy constructor
    std::unique_ptr<double> x;
                            ^
/usr/include/c++/7/bits/unique_ptr.h:383:7: note: 'unique_ptr' has been explicitly marked deleted here
      unique_ptr(const unique_ptr&) = delete;
      ^
smart_ptr.py:14: RuntimeWarning: no python-side overrides supported
  class Inherit(cppyy.gbl.Example):
66.0

그럼에도 불구하고 C ++ 클래스에서 공용 변수에 액세스 할 수 있으므로 상속이 작동하는 것으로 보입니다. 사실, 나는 cppyy가 여기서 잘못되었는지 100 % 확신하지 못합니다. C ++는 괜찮아 보이지만, 스마트 포인터에 대한 경험이 없기 때문에 이상한 방식으로 스마트 포인터 / 가상 소멸자를 사용하고있을 수 있습니다.

std::shared_ptr대신 a 사용하면 오류가 발생하지 않습니다 .std::unique_ptr

이니스프리

SM에서 알 수 있듯이를 사용해야한다면 unique_ptr복사 생성자를 정의하는 것이 트릭 인 것 같습니다. 예를 들어이 예제는 오류 메시지없이 예상 된 결과를 제공합니다.

import cppyy

cppyy.cppdef("""
  class Example { 
    std::unique_ptr<double> x;
   public:
    Example() { x = std::unique_ptr<double>(new double(123.)); } 
    // Copy constructor
    Example(const Example& other) : x(other.x ? nullptr : new double(*other.x)) {}
    virtual ~Example() = default;
    double y = 66.;
    double get_x() { return *x; }
  };
  auto e = Example();
  auto f = e;
  """)

class Inherit(cppyy.gbl.Example):
  pass

a = Inherit()
print(a.get_x())  # prints 123.
print(a.y)  # prints 66.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

다른 데이터를 포함하는 클래스 디자인

분류에서Dev

다형성 클래스에 대한 포인터를 포함하는 벡터

분류에서Dev

이미 포함 된 다른 클래스를 상속하는 클래스 상속

분류에서Dev

cppyy를 사용하여 포인터에서 클래스 배열을 인덱싱하는 방법

분류에서Dev

클래스 A 내의 클래스 B는 클래스 A를 상속합니다.

분류에서Dev

클래스를 상속하는 클래스를 포함하는 C # WPF x : Type 마크 업

분류에서Dev

Boost : 포인터를 포함하는 클래스 인스턴스의 직렬화

분류에서Dev

다른 상속 된 클래스를 포함하는 멤버가있는 상속 된 클래스?

분류에서Dev

상속 된 클래스를 포함하는 SuperClass의 ArrayList

분류에서Dev

클래스에 대한 포인터를 생성하는 함수

분류에서Dev

다른 클래스를 속성으로 포함하는 클래스

분류에서Dev

다른 클래스의 포인터를 통해 액세스 할 때 "무작위"값을 포함하는 클래스의 배열 속성

분류에서Dev

gtkmm 위젯-스마트 포인터 또는 포인터를 사용합니까?

분류에서Dev

JPA 엔티티는 @Id를 포함하는 클래스를 확장합니다.

분류에서Dev

다른 클래스에서 (벡터) 포인터를 호출하는 C ++는 빈 크기를 반환합니다.

분류에서Dev

WCF 데이터 계약에 클래스 인스턴스를 포함하는 방법은 무엇입니까?

분류에서Dev

동적 포인터를 포함하는 STL :: list <class something>의 클래스 제거

분류에서Dev

Autoloader 함수는 내장 PHP 클래스를 포함하려고합니다.

분류에서Dev

MQSimpleConnectionManager 클래스를 포함하는 JAR

분류에서Dev

종속성의 클래스를 포함하는 jar 파일

분류에서Dev

CSS는 특정 클래스 만 포함하는 요소를 선택합니다.

분류에서Dev

클래스 파일에 다른 클래스를 포함하는 방법

분류에서Dev

함수 포인터를 C의 다른 함수 포인터로 캐스팅하는 것이 안전합니까?

분류에서Dev

상속 된 클래스의 포인터를 확인하는 방법은 무엇입니까?

분류에서Dev

클래스에 대한 C ++ 포인터, 클래스 인스턴스가 해제 된 함수를 호출하는 것이 좋습니다.

분류에서Dev

동일한 클래스를 포함하는 모듈의 다중 포함

분류에서Dev

포인터를 사용하여 클래스의 인스턴스를 만드는 것이 가능합니까?

분류에서Dev

클래스 포인터가있는 if 문이 segfault를 유발합니다.

분류에서Dev

추상 슈퍼 클래스 목록을 포함하는 클래스입니다. 모든 하위 클래스를 #include해야합니까?

Related 관련 기사

  1. 1

    다른 데이터를 포함하는 클래스 디자인

  2. 2

    다형성 클래스에 대한 포인터를 포함하는 벡터

  3. 3

    이미 포함 된 다른 클래스를 상속하는 클래스 상속

  4. 4

    cppyy를 사용하여 포인터에서 클래스 배열을 인덱싱하는 방법

  5. 5

    클래스 A 내의 클래스 B는 클래스 A를 상속합니다.

  6. 6

    클래스를 상속하는 클래스를 포함하는 C # WPF x : Type 마크 업

  7. 7

    Boost : 포인터를 포함하는 클래스 인스턴스의 직렬화

  8. 8

    다른 상속 된 클래스를 포함하는 멤버가있는 상속 된 클래스?

  9. 9

    상속 된 클래스를 포함하는 SuperClass의 ArrayList

  10. 10

    클래스에 대한 포인터를 생성하는 함수

  11. 11

    다른 클래스를 속성으로 포함하는 클래스

  12. 12

    다른 클래스의 포인터를 통해 액세스 할 때 "무작위"값을 포함하는 클래스의 배열 속성

  13. 13

    gtkmm 위젯-스마트 포인터 또는 포인터를 사용합니까?

  14. 14

    JPA 엔티티는 @Id를 포함하는 클래스를 확장합니다.

  15. 15

    다른 클래스에서 (벡터) 포인터를 호출하는 C ++는 빈 크기를 반환합니다.

  16. 16

    WCF 데이터 계약에 클래스 인스턴스를 포함하는 방법은 무엇입니까?

  17. 17

    동적 포인터를 포함하는 STL :: list <class something>의 클래스 제거

  18. 18

    Autoloader 함수는 내장 PHP 클래스를 포함하려고합니다.

  19. 19

    MQSimpleConnectionManager 클래스를 포함하는 JAR

  20. 20

    종속성의 클래스를 포함하는 jar 파일

  21. 21

    CSS는 특정 클래스 만 포함하는 요소를 선택합니다.

  22. 22

    클래스 파일에 다른 클래스를 포함하는 방법

  23. 23

    함수 포인터를 C의 다른 함수 포인터로 캐스팅하는 것이 안전합니까?

  24. 24

    상속 된 클래스의 포인터를 확인하는 방법은 무엇입니까?

  25. 25

    클래스에 대한 C ++ 포인터, 클래스 인스턴스가 해제 된 함수를 호출하는 것이 좋습니다.

  26. 26

    동일한 클래스를 포함하는 모듈의 다중 포함

  27. 27

    포인터를 사용하여 클래스의 인스턴스를 만드는 것이 가능합니까?

  28. 28

    클래스 포인터가있는 if 문이 segfault를 유발합니다.

  29. 29

    추상 슈퍼 클래스 목록을 포함하는 클래스입니다. 모든 하위 클래스를 #include해야합니까?

뜨겁다태그

보관