我想创建一个函数,它接受字符串数组并通过对每个数组元素执行lexical_cast将其转换为元组。
std :: array size与std :: tuple大小相同,所有元组类型在编译时都是已知的
例如:
std::tuple<int, double> Result = Convert({"1", "1.0"});
或
int A, B;
std::tie(A, B) = Convert({"1", "2"});
如果能获得可接受的性能并且没有c ++ 14支持,我该怎么做呢?
答案 0 :(得分:2)
你可以做
10001|23|1|"abcd"|4|"A"
使用方法:
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...>());
}
答案 1 :(得分:0)
您必须提供要转换的类型。如:
dataArray.push([Date.parse(d), parseInt(obj.in)])
有了它,它并没有那么糟糕:
std::tuple<int, double> Result = Convert<int, double>({"1", "1.0"});
SO上有几个C ++ 11的索引序列技巧实现。