c++ - 为什么C++找不到模板函数?

标签 c++ function templates

为什么会出现编译错误 no matching function for call to `f( __gnu_cxx::__normal_iterator > >)'

#include <vector>

template<typename T>
void f(const typename std::vector<T>::iterator &) {}

void g() {
  std::vector<int> v;
  f<int>(v.end());  // Compiles.
  f(v.end());  // Doesn't compile, gcc 4.3 can't find any match.
}

最终我想编写一个函数,它只接受一个 vector 迭代器,并且无法编译(有一个有意义的错误)其他任何东西。所以template<typename T>void f(const T&) {}这不是一个好的解决方案,因为它也可以为其他类型编译。

最佳答案

你不能从嵌套类型中推导出模板参数。想一想,例如 std::vector<T>::size_type这总是 std::size_t :编译器将如何解决歧义?我意识到您的示例中情况并非如此,但适用相同的原则。例如 std::vector<T> 的迭代器类型可以是T*也可以是 std::array<T, N> 的迭代器类型.

关于c++ - 为什么C++找不到模板函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18301563/

相关文章:

C++ 指向派生类成员的指针

c++ - 基类如何禁用派生类的构造函数

c++ - `auto &&`参数可以完美转发吗?

c++ - 如果删除一个对象,究竟会发生什么? (gcc)(当双删除崩溃时?)

c++ - Makefile 与 OpenMP : cannot specify -o with -c, -S 或 -E 与多个文件

reactjs - react 按键输入

c - bsearch() 按名称比较

php - 如何执行一个js函数使用另一个函数的元素带来ajax页面

c++ - 任何返回类型的可变函数包装器

c++ - 有人可以解释这个模板函数声明语法吗