auk*_*ukm 8 c++ boost variadic-functions
我想用可变参数列表编写一个函数.我想探索我的选择.我很确定我是为了这个目的而设计的增强模板类,但我想不出它的名字?有人能告诉我吗?还是我梦见了这个!谢谢
如果您只需要接受相同类型的参数的可变计数,那么获取容器将是常见的事情.但是可以使用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)
归档时间: |
|
查看次数: |
4375 次 |
最近记录: |