8
我想用可變參數列表編寫一個函數。我想探索我的選擇。我很確定我來過一個專爲此目的而設計的boost模板類,但我想不出它的名字?誰能告訴我?還是我夢想這一點! 謝謝變量參數列表與提升?
我想用可變參數列表編寫一個函數。我想探索我的選擇。我很確定我來過一個專爲此目的而設計的boost模板類,但我想不出它的名字?誰能告訴我?還是我夢想這一點! 謝謝變量參數列表與提升?
如果你只需要接受一個相同類型的參數的變量數,取一個容器是常見的事情。使用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"
你的意思是變量參數計數,但一種類型,或者也是任意類型? – 2010-09-19 00:35:30
我不確定庫提供了什麼,我似乎無法重新定位它,我想這是對va_list的某種改進 - 可能是類型安全 – aukm 2010-09-19 00:56:12
您的函數只需要接受一種類型的參數嗎? – 2010-09-19 01:00:13