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
로 동작합니다. 유형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) |