c++ - 比较范围构造函数中的迭代器 value_type

标签 c++ c++11 typetraits

我正在为自定义容器编写范围构造器:

MyContainer(const InputIterator& first, 
            const InputIterator& last, 
            const allocator_type& alloc = allocator_type())

并希望检查 InputIterator::value_type 是否与容器的 value_type 兼容。我最初尝试过:

static_assert(!(std::is_convertible<InputIterator::value_type, value_type>::value ||
        std::is_same<InputIterator::value_type, value_type>::value), "error");

并达到了:

using InputIteratorType = typename std::decay<InputIterator>::type;
using InputValueType = typename std::decay<InputIteratorType::value_type>::type;
static_assert(!(std::is_convertible<InputValueType, value_type>::value ||
        std::is_same<InputValueType, value_type>::value), "error");

但它总是断言,即使我使用 MyContainer::iterator 作为输入迭代器也是如此。

如何检查 InputIterator 是否兼容?

最佳答案

我猜你可能想要 std::is_constructible :

static_assert(std::is_constructible<
    value_type,
    decltype(*first)
    >::value, "error");

或者,或者,std::is_assignable ,取决于您是从输入迭代器构造还是分配。

关于c++ - 比较范围构造函数中的迭代器 value_type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29856531/

相关文章:

c++ - 什么是单元测试模板化 C++ 方法/类/函数的好方法?

c++ - 哪种访问 C++ 枚举数的方式更好?

c++ - C++ 中是否可以使用条件类型定义?

python - TensorFlow 类 Placeholder,以及其他定义输入张量的方式

C++如何将char作为数字而不是字符

c++ - 为什么 std::vector 的构造函数接口(interface)用 C++11 改变了?

c++ - 测试 std::pointer_traits 是否适用于我的类型

c++ - 使用动态 bool 变量实例化模板

c++ - 绑定(bind)与 Lambda?

c++ - wxWidgets,Bind 是不是很新?因为我的编译器说它没有定义。 wxVer 2.8.12.1,我一直在 wxPython 中使用 Bind for ....至少 2.6