簡體   English   中英

模板參數包無法推斷`const&`參數

[英]Template parameter pack can't infer `const&` argument

所以我有一堂課:

struct C {
  int x[10];

  int const& get(int i) const { return x[i]; }

  template<typename... Ts>
  auto& get(Ts... args) {
    int const& (C::*f)(Ts...) const = &C::get;
    return const_cast<int&>((this->*f)(args...));
  }
};

和模板將產生一個非const需求吸氣,所以這成為合法的:

int& test(C& c) {
  int i = 4;
  int& r = c.get(i);
  return r;
}

但是如果我將原始獲取方法的參數類型更改為引用:

  int const& get(int const& i) const { return x[i]; }

const getter模板不再與const getter匹配。

顯然,按值傳遞int沒什么大不了的,並且將參數列表顯式傳遞給模板也沒什么大不了的,但是我有更復雜的參數和許多重載,我想用一個a來推斷所有非const getter。最少復制粘貼。

過去有什么辦法嗎?


我曾經想到的是,我可以在類中聲明問題參數列表,但將定義留給模板,以便參數匹配具有一些指導。 我嘗試將以下內容添加到類中(在模板之前或之后):

  int& get(int const& i);

不幸的是,這完全繞開了模板,並導致鏈接錯誤。 向聲明中添加inlinetemplate似乎也沒有成功。

為什么要通過指向成員函數的輔助指針來強制調用const成員函數? 在這種情況下,我使用const資格this

template<typename... Ts>
auto& get(Ts... args) {
    const C* const const_this = this;
    return const_cast<int&>(const_this->get(args...));
}

暫無
暫無

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

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