#include <iostream>
#include <string>
#include <tuple>
#include <boost/lexical_cast.hpp>
namespace detail
{
template <typename ... Ts, std::size_t N, std::size_t...Is>
std::tuple<Ts...>
Convert(const std::array<std::string, N>& s,
std::index_sequence<Is...>)
{
return std::tuple<Ts...>{boost::lexical_cast<Ts>(s[Is])...};
}
}
template <typename ... Ts, std::size_t N>
std::tuple<Ts...> Convert(const std::array<std::string, N>& s)
{
static_assert(N == sizeof...(Ts), "Unexpected size");
return detail::Convert<Ts...>(s, std::index_sequence_for<Ts...>());
}
int main() {
std::array<std::string, 2u> ns = {"1", "4.2"};
auto t = Convert<int, double>(ns);
std::cout << std::get<0>(t) << " " << std::get<1>(t) << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dHVwbGU+CiNpbmNsdWRlIDxib29zdC9sZXhpY2FsX2Nhc3QuaHBwPgoKbmFtZXNwYWNlIGRldGFpbAp7CgoJdGVtcGxhdGUgPHR5cGVuYW1lIC4uLiBUcywgc3RkOjpzaXplX3QgTiwgc3RkOjpzaXplX3QuLi5Jcz4KCXN0ZDo6dHVwbGU8VHMuLi4+CglDb252ZXJ0KGNvbnN0IHN0ZDo6YXJyYXk8c3RkOjpzdHJpbmcsIE4+JiBzLAoJICAgICAgICBzdGQ6OmluZGV4X3NlcXVlbmNlPElzLi4uPikKCXsKCQlyZXR1cm4gc3RkOjp0dXBsZTxUcy4uLj57Ym9vc3Q6OmxleGljYWxfY2FzdDxUcz4oc1tJc10pLi4ufTsKCX0KCn0KCnRlbXBsYXRlIDx0eXBlbmFtZSAuLi4gVHMsIHN0ZDo6c2l6ZV90IE4+CnN0ZDo6dHVwbGU8VHMuLi4+IENvbnZlcnQoY29uc3Qgc3RkOjphcnJheTxzdGQ6OnN0cmluZywgTj4mIHMpCnsKCXN0YXRpY19hc3NlcnQoTiA9PSBzaXplb2YuLi4oVHMpLCAiVW5leHBlY3RlZCBzaXplIik7CglyZXR1cm4gZGV0YWlsOjpDb252ZXJ0PFRzLi4uPihzLCBzdGQ6OmluZGV4X3NlcXVlbmNlX2ZvcjxUcy4uLj4oKSk7Cn0KCmludCBtYWluKCkgewoJc3RkOjphcnJheTxzdGQ6OnN0cmluZywgMnU+IG5zID0geyIxIiwgIjQuMiJ9OwoJYXV0byB0ID0gQ29udmVydDxpbnQsIGRvdWJsZT4obnMpOwoJCglzdGQ6OmNvdXQgPDwgc3RkOjpnZXQ8MD4odCkgPDwgIiAiIDw8IHN0ZDo6Z2V0PDE+KHQpIDw8IHN0ZDo6ZW5kbDsKfQ==