0

C# (관리되는) 응용 프로그램에서 사용하기로되어있는 C++/CLI 라이브러리를 작성하고 있습니다.C++ OptionalAttribue 및 C# Intellisense

void Function (object obj, object opt1 = null, int opt2 = 0) 

C#에서 그런 일을 작성 실제로 인텔리에서 같은 일을 보여줍니다

나는 C에서 #은 다음과 같이 기록 될 것입니다 선택적 매개 변수를 받아들이는 방법을 쓰고 싶어요. C++/CLI에서

나는 헤더 파일에 쓰기 :

void Function (object object, object opt1 = bad value, int opt2 = bad value) 

비고 : 나는 C# 인텔리에 다음과 같은 기능을 얻을

void Function (Object^ obj, [Optional] Object^ opt1 , [Optional] int opt2); 

내 라이브러리를 컴파일 한 후 내가 이해 기본값을 "default(TYPE)"이외의 것으로 변경할 수 없으므로 시도하지 않습니다.

답변

1

C# 팀은 언어 기능으로 선택적 매개 변수를 추가하는 것을 매우 꺼려했습니다. 그들은 버전 4에서 대중적인 요구에 빠져 들었습니다. 특히 Office 프로그래밍은 그것 없이는 아주 잔인합니다.

이 경우 중요한 문제는이 기능이 언어와 매우 밀접한 관련이 있다는 것입니다. 선택적 및 기본 매개 변수는 매우 C++에서 다르게 작동합니다. 선택적 매개 변수는 메서드 서명 (thinkf)에 ...으로 인코딩되며, 기본 매개 변수 값은 언어의 순수 컴파일러 기능이며, 기본값은 일반적으로 .h 파일의 함수 선언에서 검색됩니다. 그리고 C3222의 ref 클래스 메서드에서이 클래스를 사용하려고 시도했을 때 패배했습니다. 구현 자들은 2005 년에 다시 작동하지 않을 것이므로 언어가 유지 관리 모드에 있었음을 알았습니다.

기본 매개 변수 값이 누락되면 C++/CLI 컴파일러는 메타 데이터 디 컴파일러가 "나쁜 값"이외의 값을 표시 할 수 없도록 생성하지 않습니다. 작동하지 않는 것처럼 특정 케이스의 C++/CLI 코드에서 Type::Missing을 얻을 수 있습니다. 어떤 설명이 기괴하게 보일 수도 있지만 기본값 (T)에서 가정하는 것처럼 nullptr이 아닙니다. 그러나 Office interop과 호환됩니다.

interop 코드에서이를 방지하는 것이 좋습니다. 메소드 오버로드를 고려하십시오.