gpt4 book ai didi

c++ - 我需要哪种类型的std::function才能将其分配给std::upper_bound或std::lower_bound

转载 作者:行者123 更新时间:2023-12-02 09:59:27 26 4
gpt4 key购买 nike

我有一个std::vector<double> m_x;在某个时候,我要么需要std::lower_bound(m_x.begin(), m_x.end(), x)作为double x,要么需要std::upper_bound(m_x.begin(), m_x.end(), x)我想要的是某种

std::function<std::vector<double>::const_iterator(std::vector<K>::const_iterator, std::vector<double>::const_iterator, double)> bound;
然后我可以分配
bound = whatever ? std::upper_bound : std::lower_bound;
然后调用 bound(m_x.begin(), m_x.end(), x)只有我无法计算条件句中的语法。我也不确定 bound的类型是否正确。有任何想法吗?
更新:
当我在链接的问题( How to declare a reference to std algorithm?)中采用该技术时,即
using iterator = decltype(m_x.begin());
using overload = iterator(*)(iterator, iterator, const double&);
auto me = static_cast<overload>(std::upper_bound<iterator, iterator, const K&>);
我收到错误消息(msvc)
        error C2440: 'static_cast': cannot convert from 'overloaded-function' to 'overload'

最佳答案

您以错误的方式将答案应用于重复项。

// assuming function template<typename K>
using Iterator = decltype(m_x.begin());
using Overload = Iterator(*)(Iterator, Iterator, const K&);

auto me = bound
? static_cast<Overload>(std::upper_bound<Iterator>)
: static_cast<Overload>(std::lower_bound<Iterator>);


K findValue; // set here
// need to dereference this because `me` returns an iterator
auto value = *me(m_x.begin(), m_x.end(), findValue);

关于c++ - 我需要哪种类型的std::function才能将其分配给std::upper_bound或std::lower_bound,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63372134/

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