带有boost的变量参数列表?

时间:2010-09-18 23:58:42

标签: c++ boost variadic-functions

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

1 个答案:

答案 0 :(得分:7)

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

来轻松创建容器
void f(const std::vector<int>& vec) {}
f(boost::assign::list_of(1)(2)(3)(4));

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

op() << arg1 << arg2 << arg3;

如果您真的想提供类型安全的可变参数函数(不使用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"