gpt4 book ai didi

c++11 - 从 C++17 之前的初始值设定项推导出的类型 std::vector ...... C++11 的任何解决方法?

转载 作者:行者123 更新时间:2023-12-03 21:19:34 30 4
gpt4 key购买 nike

我从 C++17 中了解到,使用推导指南,可以推导出 std::vector 的模板参数,例如从初始化:

std::vector vec = { function_that_calculate_and_return_a_specifically_templated_type() }

但是,我现在想编译和运行代码的机器中没有 C++17 的奢侈。

C++11 有什么可能的解决方法吗?如果存在更多解决方案,最好的方法是保持代码的可读性。

目前我唯一的想法是跟踪代码中的各种情况(幸运的是它们不应该太多)并进行一些显式的 typedef/using。

任何建议都非常受欢迎

最佳答案

当 CTAD 不可用时,对类模板使用类型推导的常用方法是提供 make_*功能模板,例如对于您的情况(C++11 需要尾随返回类型):

#include <vector>
#include <type_traits>
#include <tuple>

template <class ...Args>
auto make_vec(Args&&... args) ->
std::vector<typename std::decay<typename std::tuple_element<0, std::tuple<Args...>>::type>::type>
{
using First = typename std::decay<typename std::tuple_element<0, std::tuple<Args...>>::type>::type;

return std::vector<First>{std::forward<Args>(args)...};
}

你可以调用上面的
const auto v = make_vec(1, 2, 3);

这至少有点接近 CTAD,因为您不必明确指定向量实例化。

关于c++11 - 从 C++17 之前的初始值设定项推导出的类型 std::vector ...... C++11 的任何解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55703986/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com