我有以下模板函数,该函数具有模板模板参数作为参数。
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
。
为什么编译器无法推断类型?
答案 0 :(得分:6)
我认为它可以从
@PostMapping(value = "/getTransactionByMobile") public List<TransactionDetailsVO> getTransactionDetailsByMobile( @RequestBody String mobileNo // Add @RequestBody ) { // ... }
推断类型为int。为什么编译器无法推断类型?
否。
编译器不能:寻找“非推论上下文”以获取更多信息。
期望扣除是不合理的。
假设一个类如下
std::vector<int>::iterator it;
类型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