gpt4 book ai didi

c++ - 是否可以使用 C++ 模板函数来接受任何类型 T 的集合?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:16:55 25 4
gpt4 key购买 nike

我想知道是否有一种方法可以创建一个模板函数,该函数引用任何特定类型的集合。即类似的东西:

class Bob
{
public:
int age;
int height;
}

template<class T>
void functionWhichIteratesOverBobs(T &bobs)
{
int totalAge = 0;
for(auto &bob: bobs)
{
totalAge += bob.age;
}
}

基本上有一种方法可以在模板函数的定义中要求 T 有一个 begin() 和 end() 函数,它们返回一个迭代器给 T。

我看过下面的问题,但这需要一个有开始和结束的函数,即

std::vector<Bob> bobs;
functionWhichIteratesOverBobs(bob.begin(), bob.end());

当我想要的是:

std::vector<Bob> bobs;
functionWhichIteratesOverBobs(bobs);

Function that takes an STL iterator over ANY container of a elements of a specific type

最佳答案

如果您希望保持重载集不受污染,请像这样使用表达式 SFINAE:

template<class T>
void functionWhichIteratesOverBobs(T &bobs)
-> decltype(std::begin(bobs), std::end(bobs), void()) {
// [..Range based for over bobs..]
}

请记住,如果给定一个错误的参数,您所显示的函数模板将不会在没有错误的情况下实例化,因此目前这是多余的 - 直到您开始重载 functionWhichIteratesOverBobs

关于c++ - 是否可以使用 C++ 模板函数来接受任何类型 T 的集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29404651/

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