簡體   English   中英

與模板構造函數不兼容的 cv 限定符

[英]Incompatible cv-qualifiers with template constructor

我有一個接受指向成員函數的指針的構造函數。 我有兩個不同的函數要傳入,但它們因incompatible cv-qualifiers的一些變化而失敗。

構造函數參數是

constructor(T (Class::* memfnptr)())

其中TClass是類型名。

當作為 arguments 傳遞時,我的兩個成員函數屬於以下類型。

long int (Encoder::*)() const
const char* (Drivebase::*)()

我在以下位置嘗試了許多 const 限定符的組合,以及參考const V (Class::* const func)() constconst V (Class::* const & func)() const

我可以讓我的任何一個功能工作,但不能同時工作。 我究竟做錯了什么?

不能在模板參數推導中推導出成員 function 指針的const限定符,因此需要兩個重載:

template<typename T, typename Class>
constructor(T (Class::* memfnptr)());

template<typename T, typename Class>
constructor(T (Class::* memfnptr)() const);

第一個將為非const限定的成員函數調用,第二個將為那些具有 const 限定的成員函數調用。

請注意,具有相同問題的成員函數有更多限定符: volatile&&&

您可能不需要接受所有這些,因為它們並不常見,但要獲得全套,您需要 12 次重載。

暫無
暫無

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

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