gpt4 book ai didi

c++ - 遍历通用 STL 容器以检查是否存在

转载 作者:行者123 更新时间:2023-11-30 05:24:07 27 4
gpt4 key购买 nike

我正在尝试编写一个模板函数,以便在给定对象已存在于容器中时返回 true。这就是我所在的地方,我不知道从这里到哪里去。

 template <typename BeginningIter, typename EndingIter, typename T>
static bool itemExists(BeginningIter bit, EndingIter eit, const T &searchTerm)
{
if ((bit == nullptr) || (eit == nullptr)) {
return false;
}
static_assert(std::is_same<std::decay(decltype(*bit)), std::decay(searchTerm)>::value, "Invalid");
for (auto iter = bit; iter != eit; iter++) {
if (*iter == searchTerm) {
return true;
}
}
return false;
}

虽然我也尝试在模板规范行中使用 std::enable_if,但我不知道有什么方法可以获取解除引用的 BeginningIter 项的类型。我使用 std::decay 以防它指向引用类型。但是,在尝试编译时,我得到了

generalutilities.h: In static member function ‘static bool GeneralUtilities::itemExists(BeginningIter, EndingIter, const T&)’:
generalutilities.h:148:77: error: template argument 1 is invalid
if (!std::is_same<std::decay(decltype(*bit)), std::decay(searchTerm)>::value) {
^
generalutilities.h:148:77: error: template argument 2 is invalid

最佳答案

 std::decay(decltype(*bit))

std::decay 不是函数;它是一个元函数。 IE:带有 ::type 的结构成员(或 ::value 用于产生值的元函数)。无论如何,您不能通过传递类型来调用常规函数。

您可以使用 typename std::decay<decltype(*bit)>::type 调用元函数. typename部分相当重要。

C++14 之前的版本,您可以通过创建快速别名模板来缩短代码:

template<typename T> using decay_t = typename std::decay<T>::type;

C++14 使该部分成为所有类型元函数的标准库。

关于c++ - 遍历通用 STL 容器以检查是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38820260/

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