[英]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);
不幸的是,這完全繞開了模板,並導致鏈接錯誤。 向聲明中添加inline
或template
似乎也沒有成功。
為什么要通過指向成員函數的輔助指針來強制調用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.