Java varargs在C++中的等价物

pol*_*pts 1 c++ variadic-functions

我有一个用Java编写的函数,它接受varargs作为参数.我想将该函数移植到C++.我试图搜索,但我得到的最接近的是使用参数列表的std :: vector.将varargs转换为C++的最佳方法是什么?功能如下.

public EventHandlerQueue<T> get (final EventHandler<T> ... handlers)
{
     // Do something with handlers
     return new EventHandlerQueue<T>(handlers)
}  
Run Code Online (Sandbox Code Playgroud)

Pup*_*ppy 6

我想将该函数移植到C++.我试图搜索,但我得到的最接近的是使用参数列表的std :: vector.

这是完全正确的,正是Java varags实际列出的内容,只是使用了一些不同的语法.


Dav*_*eas 6

varargs在Java中是纯语法糖。它被编译器转换为对传递/接收EventHandler<T>.

C++11 中最接近的是std::initializer_list<EventHandler<T>>您需要将参数封装在一对额外的大括号中:

EventHandlerQueue<T> get(std::initailizer_list<EventHandler<T>> handlers);

obj.get( {EventHandler1, EventHandler2} );
// asuming that `obj` is an object for which the above member is defined.
Run Code Online (Sandbox Code Playgroud)

在 C++03 中没有类似的语法糖,您需要创建一个数组/向量并传递它。由于数组具有静态定义的大小,因此这里最好的选择就是传递一个std::vector<EventHandler<T> >.