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();
}

Try it live

我理解为什么B :: foo()不编译:在结构B< T>内部,B(作为注入类名)意味着B< T>.除非它明确用作模板.在这种情况下,这会阻止类模板参数推断.

假设我不能做自动foo(){返回B< A>(A {});}因为我的实际代码依赖于稍微精细的用户提供的演绎指南.

问题是:在B :: foo中构造B时,如何强制类模板参数推导?

我希望我不会错过一些明显的东西.

解决方法:

你有资格使它不是注入类名.

auto foo() {return ::B(A{});}
上一篇:[python]pep8编码规范


下一篇:c – static_cast’d指针值