gpt4 book ai didi

c++ - 基于类型的基于范围的插入器函数

转载 作者:搜寻专家 更新时间:2023-10-31 01:05:43 24 4
gpt4 key购买 nike

我想在我的类中维护一个基于范围和类型相关的插入方法。

问题是如何使用迭代器实现这种类型依赖。

下面的伪代码应该可以解释我的问题:

class Test {

public:
template<typename Iterator>
void insert(const uint8 position, const Iterator begin, const Iterator end) {
std::copy(begin, end, std::inserter(m_deque, m_deque.begin());
}


private:
std::deque<uint8> m_deque;

};


int main() {

Test t;

uint8 dataone[] = {0x00, 0xff};
uint16 datatwo[] = {0xff, 0x00};
std::vector<uint8> vecdataone = {0x00, 0xff};
std::vector<uint16> vecdatatwo = {0xff, 0x00};

t.insert(0, dataone, dataone + 2); // OKAY
t.insert(0, datatwo, datatwo + 2); // SHOULD CAUSE AN ERROR
t.insert(0, vecdataone.cbegin(), vecdataone.cend()); // OKAY
t.insert(0, vecdatatwo.cbegin(), vecdatatwo.cend()); // SHOULD CAUSE AN ERROR

}

问候。

最佳答案

静态断言将完成这项工作:

void insert(const uint8 position, const Iterator begin, const Iterator end)
{
static_assert(
std::is_same<
typename std::iterator_traits<Iterator>::value_type,
uint8_t
>::value,
"Need iterators to uint8_t!"
);
// ....
}

我还建议使用 deque 自己的插入函数而不是 std::copy:

 m_deque.insert(s.deque.begin() + position, begin, end);

作为成员函数并因此了解内部结构,它可以更好地优化插入。

关于c++ - 基于类型的基于范围的插入器函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22205497/

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