-
Notifications
You must be signed in to change notification settings - Fork 26
Open
Description
Given a function with a class / optionalclass argument, the generated code ends up looking something like this:
interfacewrapper.cpp
std::string sName("");
IBase* pBaseThisResult(nullptr);
IFoo* pIFoo = dynamic_cast<IFoo*>(pIBaseClass);
if (!pIFoo)
throw EMyComponentInterfaceException(MYCOMPONENT_ERROR_INVALIDCAST);
bool isCacheCall = (pNameBuffer == nullptr);
if (isCacheCall) {
pBaseThisResult = pIFoo->GetProperties(sName, *pBar);
pIFoo->_setCache (new ParameterCache_3<std::string, MyComponent_uint8, CMyComponentFoo *> (sName, *pBar, pBaseThisResult));
}
else {
auto cache = dynamic_cast<ParameterCache_3<std::string, MyComponent_uint8, CMyComponentFoo *>*> (pIFoo->_getCache ());
if (cache == nullptr)
throw EMyComponentInterfaceException(MYCOMPONENT_ERROR_INVALIDCAST);
cache->retrieveData (sName, *pBar, pBaseThisResult);
pIFoo->_setCache (nullptr);
}
Since CMyComponentFoo
is a binding class, this won't compile. Also, the pointer pBaseThisResult
is actually of type IBase *
.
I've hacked a fix to get it to work by generating IBase *
instead, but as I don't know how this parameter caching is supposed to work I can't say if it's the right way to fix it.
Metadata
Metadata
Assignees
Labels
No labels