簡體   English   中英

有沒有統一函數類型限定符,簡化可惡的函數類型的建議?

[英]Is there any proposal to uniformize function type qualifiers and simplify abominable function types?

在處理基於函數類型匹配的模板時, 可惡的函數類型組合可能是一個真正的痛苦(參見std::is_function )。

各種限定符,包括 const、volatile、&、&&、noexcept(加上可變參數支持)可能會導致大量的模板特化。

但是, noexcept說明符允許使用布爾表達式noexcept(expr)

  • noexcept等價於noexcept(true)作為默認值

所以,在未來,我們能不能想象用這個模型統一所有的限定詞:

  • const限定符將等同於const(true)
  • volatile限定符將等同於volatile(true)
  • &限定符將等同於&(true)
  • &&限定符將等同於&&(true)

而且,錦上添花,使預選賽免賠額能夠寫出如下內容:

template <typename Fn>
struct function_traits;

template <typename R, bool CQ, bool VQ, bool LVRQ, bool RVRQ, bool NEQ, ARGS... Args>
struct function_traits<R(Args...) const(CQ) volatile(VQ) &(LVRQ) &&(RVRQ) noexcept(NEQ)>
{
    static constexpr bool is_const_qualified = CQ;
    static constexpr bool is_volatile_qualified = VQ;
    static constexpr bool is_lvalue_ref_qualified = LVRQ;
    ...
};

我想聽聽有關此類問題的任何想法。

我之前在 std-proposals 郵件列表上提出了類似的建議。 請參閱此處此處的線程。

從這次討論中得出的結論是,在語言中添加這樣的特性需要大量的工作。 不僅需要在語言中添加規則來推導限定符的布爾參數,而且還有許多其他問題,例如限定符的實例化和評估點。 這種規模的提案也可能會引入許多其他必須解決的問題。

Gašper Ažman 似乎相信某種形式的“計算推論”將是更可行的問題的替代解決方案。 如果您有興趣幫助完成這項工作,那么我建議您與他聯系。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM