不是真的優雅,但使用的元組,std::tie
等..
下面的例子應該與C++ 11
---編輯工作---
修改和統一(C++ 11沒有C++ 14元素)我的第一個例子。
沒有必要的std::index_sequence
(微不足道struct indSeq
可以用來代替)或std::make_index_sequence
(索引序列可以池莉構建步驟通過使用sizeof...(I)
步驟);不再需要qux()
。
#include <tuple>
#include <iostream>
void foo()
{ }
template <typename T0, typename ... Types>
void foo (const T0 & v0, const Types & ... values)
{
std::cout << "-- " << v0 << std::endl;
foo(values...);
}
template <std::size_t ...>
struct indSeq
{ };
template <std::size_t ... Is, typename ... Ts1>
void baz (std::size_t, const indSeq<Is...> &, const std::tuple<Ts1...> & t)
{ foo(std::get<Is>(t)...); }
template <std::size_t ... Is, typename ... Ts1, typename T0, typename ... Ts2>
void baz (std::size_t n, const indSeq<Is...> &, const std::tuple<Ts1...> & t,
const T0 & v0, const Ts2 & ... vs)
{ baz(n+1U, indSeq<Is..., sizeof...(Is), sizeof...(Is)+1U>(),
std::tuple_cat(t, std::tie(n), std::tie(v0)), vs...); }
template <typename ... Types>
void bar (const Types & ... values)
{ baz (1U, indSeq<>(), std::tuple<>(), values...); }
int main()
{
bar(11, 22L, "33", 44.44);
return 0;
}
對不起,我的英語不好。
我假設'bar'應該叫'foo'?不是自己遞歸調用? –
你看過關聯數組嗎?這似乎是這種類型的數據結構的問題 –
是的,我錯了,它當然是'富',而不是'酒吧' –