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파라미터에 대한 입력으로 전달하는 것도 지원되지 않습니다.인스턴스화가 불완전하거나 없는 클래스 템플릿
unionstd네임스페이스에서 정의된 데이터형. 단, 다음의 데이터형은 예외적으로 지원됨:std::stringstd::wstringstd::u16stringstd::u32stringstd::vectorstd::shared_ptrstd::functionstd::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로 동작합니다. 유형T는std::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) = b | subsassign(a,s,b) |
b(a) | subsindex(a) |