gpt4 book ai didi

c++ - SFINAE应用于迭代器

转载 作者:行者123 更新时间:2023-11-30 03:24:03 25 4
gpt4 key购买 nike

我正在编写一个模板函数,它应该只接受包含特定类型(由模板定义)的任何容器的随机访问迭代器。目前,我首先尝试使用 SFINAE 限制迭代器的类型,但代码无法编译。

#include <iostream>
#include <type_traits>
#include <vector>

template<typename It,
std::enable_if<
std::is_same<typename std::iterator_traits<It>::iterator_category,
std::random_access_iterator_tag>::value,
typename std::iterator_traits<It>::difference_type>>
void func(const It& begin, const It& end)
{
std::cout << begin[0] << std::endl;
}


int main()
{
std::vector<int> a = {0,1,2,3,4,5};
func(a.begin(), a.end());
return 0;
}

错误是:

error: ‘struct std::enable_if<std::is_same<typename
std::iterator_traits<_Iter>::iterator_category,std::random_access_iterator_tag::value,
typename std::iterator_traits<_Iterator>::difference_type>’ is not a
valid type for a template non-type parameter template<typename It,
std::enable_if<std::is_same<typename std::iterator_traits

error: no matching function for call to
‘func(std::vector<int>::iterator, std::vector<int>::iterator)’
func(a.begin(), a.end());

最佳答案

我无法解析你的enable_if。行得通:

template<typename It, typename std::enable_if<std::is_same<typename std::iterator_traits<It>::iterator_category, std::random_access_iterator_tag>::value, int>::type = 0>
void func(const It& begin, const It& end)
{
std::cout << begin[0] << std::endl;
}


int main()
{
std::vector<int> a = {0,1,2,3,4,5};
func(a.begin(), a.end());
return 0;
}

但可能是我误解了你的意图。

关于c++ - SFINAE应用于迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50019432/

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