그게 질문입니다.C++의 C# params와 비슷한 것은 무엇입니까?
답변
동일한 편리한 구문을 사용하여 관리되지 않는 C++의 경우,
그러나 C++에서 함수에 variable argument lists을 지원합니다.
기본적으로 마지막 매개 변수가 줄임표 (...) 인 함수를 선언하고 함수 본문 내에 va_start()/va_arg() 호출을 사용하여 제공된 매개 변수 목록을 구문 분석합니다.
이 메커니즘은 안전 입력되지 않으며, 발신자 아무것도 통과 할 수 있으므로 공용 함수의 인터페이스와 당신이 전달 될 것으로 기대를 문서화 명확하게해야한다.
관리 C++ 코드의 경우, 리드의 의견을 참조 .
예. 표준 C++에서는 va_arg 및 ... 구문을 사용할 수 있습니다. MSDN for details을 참조하십시오.
C++/CLI의 경우이 바로 가기가 있습니다.
void TheMethod(String^ firstArgument, ... array<Object^>^ variableArgs);
이 blog post for details를 참조하십시오
는이 같이 않습니다.
에 대해 잘 알고 있습니다 ... C++에는이 확장 기능이 있음을 알지 못했습니다. 관리되는 코드. – LBushkin
@LBushkin : 더 나은 구문으로 업데이트되었습니다. –
부스트에는 named parameters 라이브러리가 있습니다 (C#의 params가 무엇인지 정확하게 이해했다면). 다음과 같은 함수를 작성할 수 있습니다.
int y = lib::f(_name = "bob", _index = 2);
중요한 오버 헤드가 있는지는 알 수 없습니다.
C# params의 이름이 params가 아닙니다. 가변 길이 인수 목록입니다. –
현대의 C++에서는 요즘 가변 형식 함수에 대해 최신 유형 안전 사례를 사용할 수 있습니다. 모든 인수가 가변 인자 템플릿으로 동일한 유형
이있는 경우
사용 가변 인자 템플릿 또는 표준 중 하나는 :: initializer_list, 당신은 가변 매개 변수 목록을 통과하기 위해 재귀를 사용합니다. 가변 인자 템플릿 예 :
template<class T>
void MyFoo(T arg)
{
DoSomething(arg);
}
template<class T, class... R>
void MyFoo(T arg, R... rest)
{
DoSomething(arg);
// If "rest" only has one argument, it will call the above function
// Otherwise, it will call this function again, with the first argument
// from "rest" becoming "arg"
MyFoo(rest...);
}
int main()
{
MyFoo(2, 5.f, 'a');
}
이 그 정확한 과부하 것, 당신이 MyFoo에 재귀 호출하기 전에 실행 해봐요, 또는 기타 코드, 당신은 함수 MyFoo에 전달할 각 인수의 유형에 대한 과부하를 가지고 있음을 보장합니다 전화 받기. 표준으로
:: initializer_list, 당신은
template<class T>
void MyFoo(std::initializer_list<T> args)
{
for(auto&& arg : args)
{
DoSomething(arg);
}
}
int main()
{
MyFoo({2, 4, 5, 8, 1, 0}); // All the arguments have to have the same type
}
'static_assert'와 가변 템플릿을 결합하여 유연한 초기화 프로그램 목록을 만들 수 있다는 점은 주목할 만합니다. F.ex. 예제에서'std :: is_base_of'와'T'의 static_assert를 결합하여 모든 타입이 특정 기본 클래스에서 파생되었는지 확인할 수 있습니다. – atlaste
- 1. PHP에서 Hibernate와 비슷한 것은 무엇입니까?
- 2. C#의 "파이썬 인터프리터"와 가장 비슷한 것은 무엇입니까?
- 3. ASP.Net 용 WPF의 ValueConverters와 비슷한 것은 무엇입니까?
- 4. C의 인수 목록에서 의미하는 것은 무엇입니까?
- 5. Eclipse 용 Emacs의 버퍼/창 지원과 비슷한 것은 무엇입니까?
- 6. C의 공용 라이브러리는 무엇입니까?
- 7. params와 함께 sp_executesql을 사용하면 변수를 선언해야한다고 불평합니다.
- 8. C# 및 C의 휘발성 차이
- 9. std :: C의 대안 C
- 10. Objective-C/C의 배열 이해
- 11. C++에서 Thread.SetApartmentState에 해당하는 것은 무엇입니까?
- 12. C++에서이 함수를 호출하도록 강요하는 것은 무엇입니까?
- 13. C#에서 #pragma warning을 사용하는 것은 무엇입니까?
- 14. Excel vba로 할 수있는 것은 무엇입니까? C#
- 15. C#에서`default` 키워드를 사용하는 것은 무엇입니까?
- 16. C++에서 const 오버로드를 사용하는 것은 무엇입니까?
- 17. C++에서 명령문으로 간주되는 것은 무엇입니까?
- 18. C++ - 여기서 const가 나타내는 것은 무엇입니까?
- 19. "declarator invalid"로 만드는 것은 무엇입니까? C++
- 20. C#에서 Java의 enum과 동일한 것은 무엇입니까?
- 21. C++에서 작은 개체로 간주되는 것은 무엇입니까?
- 22. 프로그래머가되어야하는 것은 무엇입니까?
- 23. before_filter에서 정의되지 않은 params와 세션 해시
- 24. Visual C# 2008 속성 창과 비슷한 것을 만드는 방법은 무엇입니까?
- 25. Objective-C의 "범주"란 무엇입니까?
- 26. @ 기호는 Objective-C의 의미는 무엇입니까?
- 27. Sinatra와 비슷한 Python은 무엇입니까?
- 28. C#이 비슷한 문자열 비교
- 29. C# URL과 비슷한 내용을 가져옵니다.
- 30. 마샬링해야 할 것은 무엇입니까?
당신이 "C#을 PARAMS"남자 무엇 프로그래머 C++ 말씀해 주시겠습니까 인수를 통해 이동하는 간단한 foreach 루프를 사용합니까? –
@ JohannesSchaub-litb 그것은 [params] (https://msdn.microsoft.com/en-us/library/w5zay9db.aspx) 키워드 – jxramos