例如
class A
{
int foo() {return 1;}
void goo( decltype(((A*)nullptr)->foo()) i) {}
};
decltype(((A*)nullptr)->foo())
在这里不起作用,因为A是不完整的类。怎么办?
关于 coliru:http://coliru.stacked-crooked.com/a/830fdd982167a4e8
要检索类中成员函数的返回类型,可以使用尾随返回类型语法和 decltype 来获取返回类型。以下是如何实现此目标的示例:
cpp
复制代码 A 类 { 自动 foo() -> int { 返回 1; }
using ReturnType = decltype(std::declval<A>().foo());
公众: void goo(ReturnType i) {} };
在此代码中:
auto foo() -> int 指定 foo() 返回一个整数。 std::declval().foo() 在 decltype 内部使用来推导 foo() 成员函数的返回类型。 使用 ReturnType = ... 在类中定义了一个别名 ReturnType,它表示 foo() 的返回类型。 goo() 现在使用 ReturnType 作为其参数类型。 这样,您就可以在类 A 中为 foo() 的返回类型定义一个类型别名,从而允许您在类中的其他成员函数中使用它。