c++ - 在自己的成员函数中构造类时如何强制类模板参数推导?
问题描述
考虑以下代码:
struct A {};
template <typename T> struct B
{
B(T) {}
auto foo() {return B(A{});} // error: no matching function for call to 'B<int>::B(A)'
};
auto foo() {return B(A{});} // compiles
int main()
{
foo();
B b(0);
b.foo();
}
我理解为什么B::foo()
不编译:在struct B<T>
,内部B
(作为注入的类名)意味着B<T>
除非它被明确用作模板。在这种情况下,它可以防止类模板参数推导。
假设我做不到,auto foo() {return B<A>(A{});}
因为我的实际代码依赖于稍微复杂的用户提供的演绎指南。
B
问题是:在内部构造时如何强制类模板参数推导B::foo
?
我希望我没有遗漏一些明显的东西。
解决方案
您对其进行限定,使其不是注入的类名。
auto foo() {return ::B(A{});}
推荐阅读
- nlp - AllenNLP - 支持不同的语言
- sql - 在 PostgreSQL 的其他列中列出与特定序列匹配的值
- javascript - 如何在 Javascript 文件中使用 jinja 标签?
- java - 有没有办法让两个线程不从共享集合中获取相同的项目?
- php - getImageFormat() 返回的 imagick PHP false 值
- c# - .Net:如何将 stderr 消息从调用重定向到 DllImported C 函数?
- c++builder-6 - Embarcadero 拒绝重新安装 C++ Builder 6
- c - 使用 request_region 和 release_region 的示例
- reactjs - react-hook-form 注销后保持验证字段
- dart - 如何实现不将数字转换为双精度的 json 解码器?