`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 类型推导。
如何为 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 类型推导。