【发布时间】:2015-06-06 22:02:08
【问题描述】:
我想知道是否有一种方法可以创建一个模板函数,该函数引用特定类型的任何集合。即类似:
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
【问题讨论】:
-
"要求那个 T"...那个 T 什么?
-
修正了上面的句子。
-
这是为了提供重载或提供更好的错误消息吗?
-
如果您尝试使用这些函数并且它们对于 T 不存在,则代码将无法编译。有什么问题?
-
您要查找的内容称为"concepts"。由于各种原因,他们从未将其纳入任何 C++ 规范,而且可能永远不会。