声明函数模板的语法
syntax for declaring a function template
我正在尝试创建一个模板函数,该函数接受任何类型T(现在是原始类型)的矢量参数,并打印出其内容:
template<class T>
void displayContents(const vector<T>& data)
{
vector<T>::const_iterator i;
i=data.begin();
for( ; i!=data.end(); i++){
cout<<*i<endl;
}
}
错误信息是:
在函数'void displayContents(const std::vector>&)'中:错误:在'i'之前预期';'错误:'i'未在此范围内声明===构建完成:2个错误,0个警告===
我是否忽略了语法错误?
尝试如下:
typename vector<T>::const_iterator i;
如果您的目标是输出每个元素,则不应该将自己限制为向量。惯用的通用解决方案是传递两个迭代器:
template<typename ForwardIterator>
void display_contents(ForwardIterator begin, ForwardIterator end)
{
for (ForwardIterator it = begin; it != end; ++it)
{
std::cout << *it << 'n';
}
}
然后你可以将模板用于vector、set和几乎所有其他容器:
int main()
{
std::vector<int> a {2, 3, 5, 7};
display_contents(a.begin(), a.end());
std::set<int> b {11, 13, 17, 19};
display_contents(b.begin(), b.end());
}
相关文章:
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 将重载的成员函数传递给函数模板
- C++17中函数模板中的静态数组初始化(MSVC 2019)
- 为什么 gcc 和 clang 为函数模板的实例化生成不同的符号名称?
- 具有常量引用参数的函数模板专用化
- std::span<const T> 作为函数模板中的参数
- 如何编写一个完美的缩写函数模板?
- 仅在函数模板中为那些定义了函数的类型执行函数
- 如何在C++中伪造虚拟可变参数函数模板?
- 将显式指定的函数模板重载作为模板参数传递的正确语法是什么?
- 函数模板专用化语法聚合模板化类型
- 精神语法不会编译:函数模板参数错误?
- 有人能解释一下特殊的std::函数模板参数列表语法(这个奇怪的类型(Types..))吗
- GCC 中的编译器错误,但在将 decltype 与具有尾随返回类型语法的模板化成员函数一起使用时没有 clang
- 函数模板专业化语法
- 声明函数模板的5种新语法是什么
- 声明函数模板的语法
- 函数模板语法错误
- c++中专门化函数模板的语法
- 语法帮助.模板函数对象中的模板运算符()