前幾天同事在處理專案中,呼叫某個物件的成員函式,發現每次都要先獲取成員物件,然後在呼叫函式,這樣會有大量的重複**。
auto p =
getobject()
;if(p ~
=nullptr
)
我們把所有的獲取物件封裝到乙個模版函式裡面,但是有引入新的問題,因為有的函式有返回值,而且不同的函式返回值可能不一樣,還有一些函式的返回值是空。所以我們先要實現乙個獲取函式返回值的功能,然後對於不同的函式引數數量也不同,又要處理下多引數的問題。
// 萃取函式返回值
template
<
typenamet.
.. args>
struct
mytriat
;template
<
typename
rtype
,typename
ctype
,typename..
. t>
struct
mytriat
<
rtype
(ctype::*)
(t...)
>
// 類實現
class
ctesta
;int
funcb
(int x)
; ctesta*
funcc()
;};class
ctestb
public
:template
<
typename
call
,typename..
.t>
typename
mytrait
::_type callone
(int keya, call func, t&&..
.args)
else
}private
: unordered_map<
int, ctesta*
> m_mapa;};
// 呼叫
ctestb b;
b.callone(2
,&ctesta::funca,1,
2.0)
;
類成員函式呼叫
大家都知道c 的虛函式前必須加virtual,但如果一連串的繼承下來,有的忘了加virtual會出現什麼情況呢?為了滿足我的好奇心,做了點實驗然後有了本文,僅僅是好玩,沒有啥實際意義。本文只給出vs2005的情況 首先,如果是單一類,沒加virtual的話那麼好辦,直接call a fun,非sta...
模版類的成員函式定義問題
原因 模板是在使用的時候才就地生成 的。就是說如果沒有使用到該模板,模板的 根本不會被編譯。當你類似templatename這樣使用乙個模板的時候,編譯器才將int這個型別引入templatename這個模板的 從而生成所需要的class。你將模板實現分開,那麼編譯器在引入int型別到模板 的時候,...
類成員函式呼叫的細節
class concrete void printerror private int val void main 為什麼會出現這種情況呢?原來是,函式定義的時候,就一直存在了。即無聊是否 例項化了乙個物件,print 這個函式,都是存在的。所以 pc print 是可以找到函式的入口的。只是這時候,...