转换性元素::元素
Convert element in std::tuple
我有一个带有字符串的std::tuple
,我想将元素的元素转换为整数。这可能吗?
例如:
std::tuple<std::string,std::string>("1","2") --> std::tuple<int,std::string>(1,"2")
如果要在运行时更改std :: tuple容器的基础类型之一,则 no >不可能。如果您只想将其中一个值转换为int
,则应该定义另一个元组并使用STD :: Stoi函数:
std::tuple<std::string, std::string> t1("1", "2");
std::tuple<int, std::string> t2(std::stoi(std::get<0>(t1)), std::get<1>(t1));
或使用std :: make_tuple函数和 auto
指定符,然后让编译器推断出类型:
auto t3 = std::make_tuple(std::stoi(std::get<0>(t1)), std::get<1>(t1));
这是一个通用解决方案:
template <std::size_t At, class NewType, class Tuple, std::size_t... Idx>
auto convertAt_impl(Tuple const &orig, std::index_sequence<Idx...>) {
return std::tuple{
[&] {
if constexpr(Idx == At)
return boost::lexical_cast<NewType>(std::get<Idx>(orig));
else
return std::get<Idx>(orig);
}()...
};
}
template <std::size_t At, class NewType, class... Ts>
auto convertAt(std::tuple<Ts...> const &orig) {
return convertAt_impl<At, NewType>(orig, std::index_sequence_for<Ts...>{});
}
它利用boost::lexical_cast
执行转换,但是您可以用所需的任何转换设施替换它。
可以像这样调用它:
int main() {
std::tuple tup{"1", "2"};
auto tup2 = convertAt<0, int>(tup);
static_assert(std::is_same_v<decltype(tup2), std::tuple<int, char const *>>);
std::cout << std::get<0>(tup2) << ' ' << std::get<1>(tup2) << 'n';
}
...它将通过主张并打印我们的期望。
我将包含指向Coliru演示的链接,但是它的海湾合作委员会在扩展lambda时会引起火灾,而其clang不知道if constexpr
或类模板参数扣除是什么。嘿。
相关文章:
- void* 数组将元素转换为另一种类型
- 如何将 int 数组的 1 个元素转换为字符串/字符
- 将字符串元素转换为整数 (C++11)
- 使用Stoi()将字符串数组元素转换为C 中的INT
- 如何将双数组的单个元素转换为 QString
- 向量的第一个元素转换器值
- 将字符串元素转换为整数C++
- 类型转换问题:字符数组的元素转换为整数变量
- 将文件一行的每个元素转换为整数
- 如何在C++visual studio 2013中将列表元素转换为文本块
- C++:如何将字符串矢量元素转换为无符号字符
- 如何将 c++ 字符串对象的元素转换为浮点数
- 希望我的代码逐行将矩阵元素转换为向量,它只将矩阵的最后一行显示为向量
- 将vector元素转换为字符串进行比较
- 将<char>向量前 N 个元素转换为整数
- 如何在C++中将字符串中的元素转换为它自己的字符串?
- 将uint8 vector类型的元素转换为stringstream类型
- 如何将两个双数据类型元素转换为一个Point数据类型
- 将CSringArray中的其他字符串元素转换为int - mfcc++
- 将字符数组的元素转换为整数,并使用cout打印