gpt4 book ai didi

c++ - 检查容器模板类中的迭代器类型

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:03:39 24 4
gpt4 key购买 nike

我正在编写一个容器类,并希望提供一个将迭代器作为参数的构造函数,但前提是基础迭代类型与容器类型匹配。

所以我写道:

template<typename T>
class Buffer
{
public:
template <typename InputIter>
typename std::enable_if<std::is_same<typename std::iterator_traits<InputIter>::value_type, typename T>>::type
Buffer(InputIter first, InputIter last)
{
}
};

但是我有编译错误说模板参数 1 和 2 无效

怎么了?

此处使用编译器编写代码:https://onlinegdb.com/SyIqN_mBG

最佳答案

快到了。您需要记住的是,正如您在评论中所说的那样,构造函数没有返回类型。 SFINAE 在返回类型上的常用技巧对它们不起作用。

但是它们可以有额外的模板参数,无论如何总是默认的,但是仅仅存在就可以用于 SFINAE。因此,让我们使用您提供的那个测试(在添加缺少的 ::value 之后)向 c'tor 添加一个非类型模板参数:

template<typename T>
class Buffer
{
public:
template <typename InputIter,
typename std::enable_if<std::is_same<typename std::iterator_traits<InputIter>::value_type, T>::value, int>::type = 0>
Buffer(InputIter first, InputIter last)
{
}
};

因此,如果迭代器是正确的,我们还有一个额外的 int = 0,如果不是,SFINAE! c'tor 从重载集中删除。

关于c++ - 检查容器模板类中的迭代器类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48383793/

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