Đó là câu hỏi.Bất cứ điều gì giống như C# params trong c + +?
Trả lời
Đối với C++ không được quản lý với cùng cú pháp thuận tiện, không.
Nhưng có hỗ trợ cho variable argument lists để hoạt động trong C++.
Về cơ bản, bạn khai báo hàm có tham số cuối cùng là dấu ba chấm (...) và bên trong hàm sử dụng lệnh va_start()/va_arg() để phân tích cú pháp danh sách tham số được cung cấp.
Cơ chế này không phải là loại an toàn, và người gọi có thể vượt qua bất cứ điều gì, vì vậy bạn nên ghi rõ giao diện nào của hàm và những gì bạn mong đợi để được thông qua vào.
Đối với quản lý ++ mã C, xem ý kiến của Reed .
Có. Trong tiêu chuẩn C++, bạn có thể sử dụng cú pháp va_arg và .... Xem MSDN for details.
Đối với C++/CLI, Có một lối tắt cho việc này.
Bạn làm điều này như:
void TheMethod(String^ firstArgument, ... array<Object^>^ variableArgs);
Xem blog post for details này.
Rất vui được biết về điều đó ... đã không biết C++ có phần mở rộng này cho mã được quản lý. – LBushkin
@LBushkin: Cập nhật cú pháp tốt hơn. –
Có thư viện named parameters đang tăng (nếu tôi hiểu chính xác tham số trong C# là gì). Nó cho phép các chức năng viết như thế này:
int y = lib::f(_name = "bob", _index = 2);
Không thể nói bất cứ điều gì về việc có một phí tổn đáng kể liên quan.
C# params không được đặt tên params - đó là danh sách đối số độ dài biến. –
Ngày nay, với C++ hiện đại, bạn có thể sử dụng các phương pháp an toàn loại hiện đại cho các hàm variadic.
Sử dụng một trong hai mẫu variadic hoặc std :: initializer_list nếu tất cả các đối số của bạn có cùng loại
Với mẫu variadic, bạn sử dụng đệ quy phải đi qua một danh sách tham số variadic. Variadic mẫu ví dụ:
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');
}
Điều này đảm bảo rằng nếu DoSomething hoặc bất kỳ mã khác bạn chạy trước khi cuộc gọi đệ quy để MyFoo, có một tình trạng quá tải cho các loại mỗi đối số bạn vượt qua đến chức năng MyFoo, rằng tình trạng quá tải chính xác sẽ được gọi.
Với std :: initializer_list, bạn sử dụng một vòng lặp foreach đơn giản để đi qua các đối số
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
}
Có thể đáng chú ý là bạn cũng có thể kết hợp các mẫu 'static_assert' và variadic để làm cho bạn sở hữu danh sách khởi tạo linh hoạt. F.ex. bạn có thể kết hợp 'std :: is_base_of' với một static_assert trên' T' trong ví dụ của bạn để đảm bảo rằng tất cả các kiểu được bắt nguồn từ một lớp cơ sở nhất định. – atlaste
- 1. Bất cứ điều gì giống như SciPy trong Ruby?
- 2. Templates chấp nhận "bất cứ điều gì" trong C++
- 3. Bất cứ điều gì tương tự như Hibernate trong PHP?
- 4. C# là Visual Studio như PHP là ... bất cứ điều gì?
- 5. Có điều gì giống như GhostDoc cho C++
- 6. Lập trình chụp vùng X11 bằng ffmpeg trong C/bất cứ điều gì
- 7. Có bất cứ điều gì tương tự như Junit Method Setup trong Mockito
- 8. JUnitCore.runClasses không in bất cứ điều gì
- 9. Bất cứ ai cũng biết một cái gì đó giống như RSPec cho PHP?
- 10. Git có bất cứ điều gì giống như `svn propset svn: keywords` hoặc pre-/ post-cam hooks?
- 11. Bất cứ điều gì trong ổi tương tự như chức năng của Java có hiệu lực?
- 12. Java applet không hiển thị bất cứ điều gì
- 13. Có cái gì đó giống như Python 'với' trong C#?
- 14. Func không trả lại bất cứ điều gì?
- 15. Có điều gì giống như một danh sách chung trong Cocoa/Objective-C không?
- 16. Liệu SQL Server có cung cấp bất cứ thứ gì giống như việc cập nhật KEY DUPLICATE của MySQL
- 17. Có điều gì giống như chỉ mục pmax không?
- 18. là bất cứ ai làm bất cứ điều gì về 2038 time_t lỗi?
- 19. Có điều gì giống như instanceOf (Class <?> c) trong Java không?
- 20. điều gì đó giống như dấu ngoặc kép của python trong F # (hoặc C#)?
- 21. Có điều gì đó giống như find_if trong Java không?
- 22. Bất kỳ thư viện C/C++ giống như OpenCV nào để xử lý Âm thanh?
- 23. Hủy bỏ bất cứ điều gì trong một cặp ngoặc đơn sử dụng gsub trong R
- 24. Có điều gì đó giống như __LINE__ trong Verilog không?
- 25. Bất cứ thứ gì như VisualSVN Server cho Mercurial?
- 26. CSS có bất kỳ thứ gì giống như jQuery: has()?
- 27. nodejs 'forever' không làm bất cứ điều gì
- 28. Android CookieManager setcookie không đặt bất cứ điều gì
- 29. findbugs-maven-plugin không làm bất cứ điều gì
- 30. làm thế nào để lười biếng bất cứ điều gì
bạn có thể vui lòng cho chúng tôi biết C++ lập trình những gì bạn người đàn ông với "C# params"? –
@ JohannesSchaub-litb đó là [params] (https://msdn.microsoft.com/en-us/library/w5zay9db.aspx) từ khóa – jxramos