gpt4 book ai didi

c++ - 为什么参数推导在这个模板模板参数中不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:33:23 25 4
gpt4 key购买 nike

我有以下模板函数,它的参数是模板模板参数。

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 .

为什么编译器无法推断类型?

最佳答案

I thought that it could deduce type from std::vector<int>::iterator it; as int.

Why the compiler can't deduce the type?

没有。

编译器不能:查找“非推导上下文”以获取更多信息。

期望扣除是不合理的。

假设一个类如下

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);

关于c++ - 为什么参数推导在这个模板模板参数中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56647912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com