为什么参数推断在此模板模板参数中不起作用
Why parameter deduction doesn't work in this template template parameter
>我有以下模板函数,该函数以模板模板参数作为其参数。
template<typename T,
template <typename... ELEM> class CONTAINER = std::vector>
void merge(typename CONTAINER<T>::iterator it )
{
std::cout << *it << std::endl;
}
下面的代码使用此代码。
std::vector<int> vector1{1,2,3};
merge<int>(begin(vector1));
它按预期工作,但是当我使用
merge(begin(vector1));
它无法推断出T
的类型。
我认为它可以从std::vector<int>::iterator it;
推断出类型int
.
为什么编译器无法推断类型?
我认为它可以从
std::vector<int>::iterator it;
推断出 int 的类型。为什么编译器无法推断类型?
不。
编译器不能:查找"非推导上下文"以获取更多信息。
并且期望扣除是不合理的。
假设一个类
如下所示template <typename T>
struct foo
{ using type = int; };
其中类型type
总是int
;无论T
类型是什么。
并假设一个函数如下
template <typename T>
void bar (typename foo<T>::type i)
{ }
接收int
值(typename foo<T>::type
始终int
(。
应该从下面的调用中推断出哪种T
类型?
bar(0);
相关文章:
- 带有指定长度字符* 参数的 std::regex_search 在 VS2017 中不起作用?
- 我正在开发服务器,ip作为参数传递不起作用
- G++ C++17 类模板参数推导在非常特殊的情况下不起作用
- 类中的虚拟布尔函数参数不起作用
- 模板 ctor 类型推导不起作用(没有匹配的构造函数用于初始化 ...)与函数<>参数
- 我的代码在作为参数传入 .begin() 时不起作用,但在我将 .begin() 转换为迭代器后工作
- 为什么重载运算符>在参数声明 const 时不起作用?
- 为什么当我提供一些模板参数时,C++17 模板类推导不起作用?
- 为什么static_assert在带有 const 参数的成员函数中不起作用?
- 将参考类型作为嵌套模板结构中的模板参数作为模板参数不起作用
- C++ 数组参数不起作用
- sscanf 格式参数不起作用
- 我无法正确获取这些变量声明...为什么这些参数不起作用?我只是将 n 值设置为数组长度
- DrawImage高度参数不起作用
- C++ 默认函数参数不起作用
- 输入参数不起作用
- 处理C++中的参数不起作用
- 以双精度数除以双精度数来获得循环中的余数和char参数不起作用
- VIM omnicppcomplete对函数参数不起作用
- 模板模板参数不起作用