我正在(重新)为这个库设计一个API。并且有这个函数将采用任何数量的模板化参数。我可以将其定义为:在设计可变模板API时,我应该更喜欢使用元组还是参数包?
template<typename... Ts>
void foo(bar_t bar, Ts... params);
,或者为:
template<typename... Ts>
void foo(bar_t bar, std::tuple<Ts...> params);
我知道这两个是可互换的(在两个方向):
C++11: I can go from multiple args to tuple, but can I go from tuple to multiple args?
所以两种选择都一样,但是 - 我应该更喜欢一种变体,还是仅仅是品味/个人风格?
我会说,直到一个异构初始化列表'{t1,t2,t3,...}'可以传递给'std :: tuple的类型* * T1,T2 ...'(现在不是该语言的一部分)的推导*,第一个选项更普遍(但其他原因不方便)。他们的方式是当前的语言,第二个选项*强制调用者了解显式的'std :: tuple <...>'或者'std :: make_tuple'函数。 –
alfC