`auto` return 在 class 成员的上下文中键入

`auto` return type in context of class members

如何为 class 成员使用自动类型推导?比如下面的代码

struct A
{
  auto foo(); // foo is defined in another file 
};


int main()
{
  A a;
  a.foo();
}

其中 foo 具有 return 类型 auto 导致以下错误:

error: function 'foo' with deduced return type cannot be used before it is defined
  a.foo();
    ^

错误是可以理解的,因为编译无法在不知道其定义的情况下知道 foo 的 return 类型。

我的问题是,是否有任何变通方法或某种编程模式来规避 auto return 类型不能用于 class 成员函数的问题,以防函数的声明和定义分开。

如果你想使用return类型推导,你不能将声明和定义分开到不同的文件中(除非每个人都包括两者)。除了使用实际类型外,没有其他解决方法。

当 C++ 去编译调用 func 的代码时,它必须能够知道,那时,它会 return。如果在该翻译单元中没有定义,编译器将无法知道将 return 编辑什么。因此,编译器无法编译该代码。而C++的编译模型不允许它以这种方式使用来自其他翻译单元的信息。

您最好的办法就是等待模块,这或许可以解决这个问题。

不要将 return 类型推导视为一种永远不必编写 return 类型的方法。此功能适用于 return 类型难以编写的情况,其中最合理的编写方式是 decltype(expr),而 expr 正是您要使用的表达式至 return。这些情况通常在模板代码中,无论如何都必须进入 headers 。如果 return 类型对您来说简单明了,那么就没有理由 把它放在那里。默认情况下不使用 return 类型推导。