繁体   English   中英

带有限定符的 function 类型类型定义的用例

[英]Use cases for function type typedefs with qualifiers

即使使用 class cv 和 ref 限定符,也可以typedef function 类型:

typedef void F() const volatile &&;

这可用于声明(但不定义)非静态成员函数:

struct A {
    F f;    // void f() const volatile &&
};

在模板的相关上下文中明确禁止F的这种使用。

它也可以用作模板参数。 据我所知,没有办法提取或操作该类型的 cv 和 ref 限定符。

这种typedef是否还有其他用例(使用任何限定符,不一定同时使用所有限定符)?

该标准在[dcl.fct]/6中指定了此类 function 类型(具有cv-qualifier-seqref-qualifier的函数类型)的唯一允许用例:

带有cv-qualifier-seqref-qualifier的 function 类型(包括由typedef-name ([dcl.typedef], [temp.param]) 命名的类型)应仅显示为:

  • (6.1) function 类型为非静态成员 function,

  • (6.2) 成员指针所指的 function 类型,

  • (6.3) function typedef 声明或alias-declaration的顶层 function 类型,

  • (6.4) type-parameter的默认参数中的type-id ,或

  • (6.5) 类型参数([temp.arg.type]) 的模板参数的类型ID

最小可重现代表性示例(mre):

using Func = void() const;
using Func2 = Func;       // (6.3)

struct C {
    Func f;               // (6.1)
};

Func C::* ptr;            // (6.2)

template <class T = Func> // (6.4)
struct S { };

S<Func> x;                // (6.5)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM