如何解决C++ 只提供不可推导的模板类型
假设我们有一个依赖于两种模板类型的类,其中一个专门研究构造函数,我们可以不专门研究可推导类型吗?
template <typename T,typename I>
class A {
public:
A(I i) {
}
};
int main() {
A<float,int> a(42); // this works,but we can deduce int from 42
A<float> aa(42); // doesn't work
//or
auto aaa = A<float>(42); // doesn't work
}
解决方法
在 C++20 中,你可以像这样使用别名模板推导:
template <typename I>
using A_float = A<float,I>;
int main() {
A_float a(42);
auto aa = A_float(42);
}
在 Godbolt.org 上试试:Demo。
或者,您可以定义一个 make
函数并从函数参数中推导出 I
。由于 copy elision,这并不比直接构造 A
效率低:
template <typename T,typename I>
auto make_a(I i) { return A<T,I>(i); }
int main() {
auto a = make_a<float>(42);
}
在 Godbolt.org 上试试:Demo。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。