diff --git a/stub-ext/stub-shadow.h b/stub-ext/stub-shadow.h index 523244a84b135a2801cd8503d7ad9d6642be6598..063ab890c277eff7be5404f577e6346c2ab7cdc3 100644 --- a/stub-ext/stub-shadow.h +++ b/stub-ext/stub-shadow.h @@ -119,6 +119,22 @@ struct FuncShadow } }; +template +struct FuncShadow +{ + typedef Ret (*Shadow)(Obj *,Args...); + typedef Ret RetType; + static Ret call(Obj *obj, Args ...args) + { + Shadow shadow = &call; + long id = (long)shadow; + auto iter = stub_wrappers.find(id); + assert(stub_wrappers.find(id) != stub_wrappers.end()); + LamdaWrapper *wrapper = dynamic_cast *>(iter->second); + return LamdaCaller::call(wrapper, obj, args...); + } +}; + template typename FuncShadow::Shadow depictShadow(Wrapper **wrapper, Func func, Lamda lamda) {