UE4 C 動態繫結函式的幾種實現方法 一

2021-09-27 08:37:00 字數 3502 閱讀 6541

1.1 在deleclass定義tfunction

tfunction<

void

(fstring)

> tfunone;

//繫結tfunone的函式

void

regfunone

(tfunction<

void

(fstring)

> targetfun)

1.2 在receclass宣告並定義要執行的函式
void receclass:

:echoinfoone

(fstring infostr)

1.3 在receclass將要執行的函式繫結到tfunction
deleclass:

:regfunone([

this

](fstring infostr)

);

1.4 執行流程:

receclass呼叫deleclass::regfunone,利用lambda生成乙個函式指標作為引數傳入

deleclass執行regfunone,將獲取到的函式指標賦值給tfunone,此時tfunone已經有具體函式例項

實現類中特定函式的動態繫結

2.1 在deleclass定義接收函式的委託以及繫結函式

//宣告乙個無引數最簡單的靜態委託

declare_delegate

(fwde_single_zero)

/** 繫結其他類中的函式

* @param tarobj 要繫結函式的類的例項

* @param inmethod tarobj中某個類void(fstring,int32)函式的指標

*/template<

class

userclss

>

void deleclass:

:regfuntwo

(userclass* tarobj,

typenametmemfunptrtype<

false

,userclass,

void

(fstring,int32)

>

::type inmethod)

2.2在receclass執行繫結函式
void receclass:

:echoinfotwo

(fstring infostr,int32 count)

deleclass-

>

regfuntwo

(this

,&afwreceactor:

:echoinfotwo)

;

2.3 執行流程

receclass呼叫deleclass::regfuntwo,並將自身以及需要繫結的函式傳入

deleclass定義乙個0引數委託,並利用binduobject繫結regfuntwo傳入的函式

執行委託物件

缺點:只能在繫結時傳入引數而不是在執行時

3.1 在deleclass定義接收函式的委託以及繫結函式

//宣告乙個無引數最簡單的靜態委託

declare_delegate_twoparams

(fwde_single_two,fstring,int32)

template<

class

userclss

>

void deleclass:

:regfunthree

(userclass* tarobj,

typename fwde_single_two:

:tuobjectmethoddelegate

::fmeshodptr inmethod)

3.2 在receclass執行繫結函式
void receclass:

:echoinfothree

(fstring infostr,int32 count)

deleclass-

>

regfuntwo

(this

,&afwreceactor:

:echoinfothree)

;

3.3 執行流程

receclass呼叫deleclass::regfunthree,並將自身以及需要繫結的函式傳入

deleclass定義乙個0引數委託,並利用binduobject繫結regfuntwo傳入的函式

執行委託物件

1.1 在deleclass宣告並定義泛型介面

template<

class

delegatetype

,class

userclass

, typename.

.. vartypes>

void

regfunfour

(userclass *tarobj,

typename delegatetype:

:templete tuobjectmethoddelegate

::fmethodptr inmethod,

vartypes.

.. vars)

1.2 在receclass中使用該泛型介面
declare_delegate_twoparams

(ftempdele,fstring,int32)

/** tempdele 確定委託型別

* echoinfotwo 要繫結的函式

* fstring("")/56 傳入的引數

*/deleclass-

>regfunfour

(this

,&receclass:

:echoinfotwo,

fstring

("regfunfour"),

56);

2.1 在deleclass中宣告並定義介面
template.. vartypes>

void deleclass:

:regfunfive

(tfunction<

rettype

(vartypes...

)> tarfun)

2.2 在receclass中宣告並定義介面
bool receclass:

:echoinfothree

(fstring infostr,int32 count)

//呼叫該介面

deleclass-

>regfunfive([

this

](fstring infostr,int32 count)

);

UE4 C 語言動態陣列

ue4 c 語言動態陣列 在實際的程式設計中,往往會發生這種情況,即所需的記憶體空間取決於實際輸入的資料,而無法預先確定。對於這種問題,用靜態陣列的辦法很難解決。為了解決上述問題,c語言提供了一些記憶體管理函式,這些記憶體管理函式結合指標可以按需要動態地分配記憶體空間,來構建動態陣列,也可把不再使用...

UE4 C 的const類成員函式

我們知道,在c 中,若乙個變數宣告為const型別,則試圖修改該變數的值的操作都被視編譯錯誤。例如 const char blank blank n 錯誤 要宣告乙個const型別的類成員函式,只需要在成員函式引數列表後加上關鍵字const,例如 pragma once include includ...

UE4 c 程式設計,最近常用的標頭檔案

ue4 c 程式設計,最近常用的標頭檔案 include 相關類作用 components boxcomponent.h uboxcomponent盒體觸發器 components capsulecomponent.h ucapsulecomponent膠囊觸發器,setcapsulesize co...