簡體   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