Main Content

C/C++ 지원의 제한 사항

C++98 및 널리 사용되는 C++11 기능을 기반으로 64비트로 컴파일된 라이브러리에 대한 MATLAB® 인터페이스를 만들 수 있습니다. 그러나 라이브러리가 다음 데이터형 또는 언어 기능을 포함하는 경우에는 이 기능이 해당 라이브러리에 대한 MATLAB 인터페이스에 포함되지 않습니다. 래퍼 헤더 파일을 생성하여 이 기능을 포함하는 것이 가능할 수 있습니다. 자세한 내용은 C++ Limitation Workaround Examples 항목을 참조하십시오.

지원되지 않는 데이터형

  • 64비트보다 큰 모든 데이터형(예: long double)

  • 포인터에 대한 참조(예: int*&)

  • std::string으로 구성된 포인터 또는 배열

  • 열거형에 대한 포인터 또는 참조

  • 클래스 객체에 대한 포인터로 구성된 벡터(예: std::vector<Myclass*>)

  • 참조 데이터 멤버

  • void* 데이터 멤버

  • 다차원 데이터 멤버 배열

  • 다른 데이터를 수정하는 정적 데이터 멤버

  • ** 포인터. 단, 다음의 경우는 예외적으로 지원됨:

    • MATLAB은 char**형을 지원합니다.

    • MATLAB은 함수 또는 메서드 파라미터 유형으로 사용되는 사용자 지정 클래스에 대한 ** 포인터를 지원합니다.

    • MATLAB은 함수 또는 메서드 파라미터 유형으로 사용되는 void**를 지원합니다.

  • 다중 포인터(예: type***)

  • 함수 반환 유형 또는 데이터 멤버로 사용되는 C 함수 포인터와 std::function. MATLAB 함수를 C 함수 포인터 또는 std::function 파라미터에 대한 입력으로 전달하는 것도 지원되지 않습니다.

  • 인스턴스화가 불완전하거나 없는 클래스 템플릿

  • union

  • std 네임스페이스에서 정의된 데이터형. 단, 다음의 데이터형은 예외적으로 지원됨:

    • std::string

    • std::wstring

    • std::u16string

    • std::u32string

    • std::vector

    • std::shared_ptr

    • std::function

    • std::complex

지원되지 않는 데이터형에 대한 메시지

라이브러리가 위와 같은 데이터형을 사용하는 경우, 이 기능이 라이브러리에 대한 MATLAB 인터페이스에 포함되지 않으며, MATLAB에 다음과 같은 메시지가 표시됩니다.

Did not add member 'methodName' to class 'ClassName' at HeaderFile.h:290.
  'long double' is not a supported type.

메시지를 보려면 clibgen.generateLibraryDefinition 또는 clibgen.buildInterface 함수의 Verbose 옵션을 사용하십시오.

지원되지 않는 언어 기능

  • move 생성자

  • C++ 연산자 오버로드

  • 이름 없는 네임스페이스와 클래스

  • 전처리기 지시문(매크로)

  • 전역 변수

  • 가변 인자 함수

  • 인스턴스화가 불완전하거나 없는 함수 템플릿

  • std 네임스페이스에 있는 클래스의 객체 생성(사용자 지정 클래스 포함).

  • 스마트 포인터 의미 체계. std::shared_ptr만 지원됩니다. MATLAB은 연산자 오버로드, 이동 의미 체계(move semantics), 스마트 포인터의 클래스 정의에 있는 멤버 함수를 지원하지 않아서 이들의 효용성이 제한될 수 있습니다. MATLAB에서는 그 대신 std::shared_ptr<T>가 유형 T로 동작합니다. 유형 Tstd::shared_ptr<T>에 대한 입력값으로 전달될 수 있고, std::shared_ptr<T>의 출력값으로 유형 T를 받습니다.

  • 네임스페이스 별칭. 대신 원래 네임스페이스 이름을 사용하십시오.

이러한 기능 또는 사용 방식을 포함하는 라이브러리를 빌드하면 MATLAB에 다음과 같이 표시됩니다.

Warning: Some C++ language constructs in the header file are not supported and not imported.

참고

C++ 객체를 MAT 파일로 저장하는 것은 지원되지 않습니다.

MATLAB에서 C++ 클래스 상속하기

MATLAB은 C++ 인터페이스 클래스를 상속하는 MATLAB 클래스의 생성을 지원하지 않습니다.

지원되지 않는 클래스 메서드

MATLAB은 다음과 같은 관련 함수의 정의를 통한 연산자 구현을 지원하지 않습니다.

연산

정의할 메서드

a(s1,s2,...,sn)subsref(a,s)
a(s1,...,sn) = bsubsassign(a,s,b)
b(a)subsindex(a)

관련 항목