考虑以下代码:
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();
}
Try it live
我明白为什么B::foo()
无法编译:内部struct B<T>
, B
(作为注入类名)意味着B<T>
除非它明确用作模板。在这种情况下,这会阻止类模板参数推导。
假设我做不到auto foo() {return B<A>(A{});}
因为我的实际代码依赖于用户提供的稍微复杂的推导指南。
问题是:构造时如何强制类模板参数推导B
代替B::foo
?
I hope I'm not missing something obvious.
您对其进行限定,使其不是注入的类名称。
auto foo() {return ::B(A{});}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)