在这份文件中,作者说
只有POD类型可以作为省略号"..."的参数,而std :: string不是POD类型.
我理解为这个Passing NON-POD type to Variadic function is undefined behavior.这样对吗?
虽然,他是说C/C++标准吗?我试图在n3242 C++规范中找到它.但找不到.
我想知道我的理解是正确的,这是一个标准.
我写了一个for_each为tupleS:
template <typename Tuple, typename F, size_t begin, size_t end>
enable_if_t<begin == end || tuple_size<Tuple>::value < end> for_each(Tuple&, F&&) {
}
template <typename Tuple, typename F, size_t begin = 0U, size_t end = tuple_size<Tuple>::value>
enable_if_t<begin < end && tuple_size<Tuple>::value >= end> for_each(Tuple& t, F&& f) {
f(get<begin>(t));
for_each<Tuple, F, begin + 1, end>(t, forward<F>(f));
}
Run Code Online (Sandbox Code Playgroud)
[ 实例 ]
但是Yakk对这个问题的回答给出了一个很好的例子,说明如何处理非递归地在所有tuple值上运行lambda :
namespace detail {
template<class F, class...Args>
void for_each_arg(F&& f, Args&&...args) …Run Code Online (Sandbox Code Playgroud)