带有boost的变量参数列表?

auk*_*ukm 8 c++ boost variadic-functions

我想用可变参数列表编写一个函数.我想探索我的选择.我很确定我是为了这个目的而设计的增强模板类,但我想不出它的名字?有人能告诉我吗?还是我梦见了这个!谢谢

Geo*_*che 7

如果您只需要接受相同类型的参数的可变计数,那么获取容器将是常见的事情.但是可以使用Boost.Assign简化容器的创建:

void f(const std::vector<int>& vec) {}
f(boost::assign::list_of(1)(2)(3)(4));
Run Code Online (Sandbox Code Playgroud)

或者,你可以自己去运算符重载(例如operator()或者operator<<),类似于标准库流所采用的方法:

op() << arg1 << arg2 << arg3;
Run Code Online (Sandbox Code Playgroud)

如果你真的想提供类型安全的可变参数函数(不使用C++ 0x特性),Boost.Preprocessor可以提供帮助.一般例子:

#define OUT(z, n, name) << name ## n

#define MAKE_FUNC(z, n, unused)                                     \
    template<class T BOOST_PP_ENUM_TRAILING_PARAMS(n, class T)>     \
    void func(T t BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(n, T, t) ) { \
        std::cout << t BOOST_PP_REPEAT(n, OUT, t) << std::endl;     \
    }

BOOST_PP_REPEAT(9, MAKE_FUNC, ~) // generates func() versions taking 1-10 arguments
func(1, "ab", 'c'); // prints "1abc"
Run Code Online (Sandbox Code Playgroud)