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