gpt4 book ai didi

c++ - 适当的模板使用

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

假设我有一个名为 Object 的类。 Object 类有一个成员函数想要从容器中读取字符串。假设函数如下所示:

template <class InputIterator>
void Object::add(InputIterator first, InputIterator last) { ... }

虽然这允许调用者从任意容器传递字符串,但它并不表示迭代器必须是一对字符串迭代器。

在这种情况下使用模板是否仍然合适,还是我应该强制调用者使用预先确定的字符串容器?

最佳答案

不幸的是,C++ 目前不允许您以简洁的方式整理此类信息。

C++11 应该用 concepts 来解决这个问题但由于一些概念上的(呵呵)缺陷(据我所知,which have in the meantime been solved),它们在发布前就被淘汰了。

但是您仍然可以使用静态断言和类型特征来提供此类概念。例如,C++11 允许编写以下代码:

template <class InputIterator>
void Object::add(InputIterator first, InputIterator last) {
static_assert(
std::is_same<
typename std::remove_cv<
typename std::iterator_traits<InputIterator>::value_type
>::type,
std::string>::value,
"InputIterator must be of iterator type");

}

仍然,这假设 InputIterator 是一个有效的迭代器类型。由于没有特征 is_iterator 并且没有有意义的方法来实现它(据我所知)除了检查 all required operations of an input iterator服从,这使得它比理论上要困难得多。

关于c++ - 适当的模板使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9165567/

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