gpt4 book ai didi

c++ - 如何使用 decltype 从空模板容器中提取类型?

转载 作者:行者123 更新时间:2023-11-27 22:36:38 25 4
gpt4 key购买 nike

什么是正确的 decltype从特定容器类中提取数据类型的语法,而不会重复出现 value_type成员类型定义?

我试图用 decltype<std::declval<myContainerClass>[0]> 直接访问一个元素但我意识到如果容器是空的,它就不会工作。

最佳答案

你可以使用

std::remove_reference_t<decltype(std::declval<Container>()[0])>

里面的所有东西 decltype未计算,因此访问假设的空容器的元素 0 是 UB 这一事实并不重要。这只是从容器的 operator[] 中提取必要的类型信息。 .你需要 remove_reference因为operator[]可能返回一个左值引用。

但是,这不适用于像 std::list<T> 这样的容器。 .相反,您可以使用:

typename std::iterator_traits<typename Container::iterator>::value_type

如果你不能假设 Container::iterator存在,您可以替换 typename Container::iteratordecltype(std::declval<Container>().begin()) .

关于c++ - 如何使用 decltype 从空模板容器中提取类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53343128/

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