【发布时间】:2021-10-05 20:32:57
【问题描述】:
编译器无法推导出_t2,报此错误:
无法推断“_t2”的模板参数
有任何建议,而不对main()进行任何更改?
#include <tuple>
template <
typename _t1,
template <typename> typename _t2>
void test(
_t1 p1,
std::tuple<int, _t2> p2)
{
}
int main(int argc, char *argv[])
{
test(
1,
{
2,
'a'
});
return 0;
}
【问题讨论】:
-
template <typename> typename _t2表示_t2是具有typename模板参数的类型。它应该只是typename _t2 -
@TARN4T1ON,所以我得到“无法推断'_t2'的模板参数”错误...
-
哦,是的。不同的地方。您必须在传递给
test的参数中显式调用std::tuple<int, char>的构造函数。所以要么std::tuple<int, char>(2, 'a')要么std::tuple<int, char> { 2, 'a' },而不是初始化列表。 -
@VeNToR Drew 建议的目标正是您遇到的问题(一旦您将模板模板参数更改为 TARN4TION 提到的模板参数)。为什么你不认为这是同一个问题?
-
不,它不能(好吧,它可以只使用
tuple构造函数,但这是同一回事)。无论如何,您的问题仍然与目标相同,对吗?花点时间阅读那篇文章,看看为什么如果你想推断类型就不能使用{}。