c++ - 对于相互转换的类型,有没有办法绕过 "deduced conflicting types for parameter in template instantiation"?

标签 c++ template-meta-programming

我正在玩弄自己的迭代器包装器,它是根据迭代器类型模板化的。 它工作正常,但是当我尝试在混合迭代器和 vector 迭代器的算法中使用它时出现问题。

vector<int> vi{1,2,3,4,5};                                                 
auto my_it2 = my_find(vi,2);
cout << *my_it2;// works fine
// but this does not:
vector<int> vi2 (vi.begin(), /*(std::vector<int>::iterator)*/my_it2);

include/c++/4.8/bits/stl_vector.h:392:9: note: candidate template ignored: deduced conflicting types for parameter '_InputIterator'

my_it 结构有一个用于转换为普通迭代器的运算符(这就是为什么如果你取消注释“cast”它可以工作,但它很丑。
有办法解决这个问题吗?
我对此表示怀疑,因为即使 std::max 也不适用于 short 和 int,但最好检查一下 SO。 :)

最佳答案

我不认为你可以,你从 std::vector 调用的构造函数是一个函数模板,并且在模板参数推导期间不允许隐式类型转换。所以你必须确保它们是同一类型的迭代器。

您可以创建一个非成员和非模板函数(或 vector::iterator 和您的迭代器的模板函数规范)通过采用不同的迭代器来构造一个 vector ,基本上隐藏函数中的“丑陋”位.

关于c++ - 对于相互转换的类型,有没有办法绕过 "deduced conflicting types for parameter in template instantiation"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28523925/

相关文章:

c++ - 如何在 Windows 7 的 CodeBlocks 中设置 C++11

c++ - 最佳实践 : c++ header includes

c++ - 使用可调用参数重载可调用

c++ - 为什么类型推导在(非指针)函数类型上失败

c++ - C++ 中的可变参数模板和逗号分隔的字符串

c++ - 为嵌入式 Lua 重定向/重新定义 print()

c++ - 学习曲线最简单的 C++ GUI 构建选项是什么 - VS/Qt/wxWidgets/等?

c++ - 在C++中使循环变量成为常量

c++ - 何时调用 mysql_free_result (Resuing mysql_store_result, MYSQL_RES)

c++ - 操作可变函数模板的函数参数