如何解决C ++ const引用模板函数的参数类型本身就是引用,为什么?
我具有以下功能:
template<typename T>
void f(const T& val) {
using value_type = T;
using sub_type = typename value_type::sub_type;
//etc...
}
但是,我遇到了一个问题,编译器告诉我T实际上不是它的类型,而是对其的引用。在什么情况下const-references的模板参数本身可以引用?
using value_type = std::remove_reference_t<T>;
但是我想了解在什么情况下T本身可以作为参考。
解决方法
在什么情况下const-references本身的模板参数可以引用?
这些东西是独立的。我们有一个模板参数T
。然后我们有一个函数参数恰好是T const&
。但是两者并没有捆绑在一起。
虽然T
永远不会根据该函数参数被推导为引用类型,但是推导并不是提供模板参数的唯一方法:
template <typename T>
void f(T const& val);
void g(int i) {
f<int&>(i);
}
在这里,我明确提供int&
作为T
的模板参数,但不推论。 T
在这里将是int&
(而不是int
),实际上val
甚至不是对const
的引用,实际上是{ {1}}(不是int&
)。
当然,典型用法只是int const&
(无显式模板参数),它会推论f(i)
为T
,并且int
的类型为{{1} }。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。