Can one pass type names out of angelscript?
For example, I have the following C++ function that takes a typename by string and attempts to find it..
void ObjectData::SetObjectClass(const std::wstring & moduleName, const std::wstring & classname)
{
asIScriptEngine *scriptEngine = Engine::mScript->mScriptEngine;
std::string modulenameAscii = WStringToString(moduleName);
std::string classnameAscii = WStringToString(classname);
asIScriptModule *module = scriptEngine->GetModule(modulenameAscii.c_str());
if (module)
{
mScript.mUserDataType = scriptEngine->GetObjectTypeById(module->GetTypeIdByDecl(classnameAscii.c_str()));
if (mScript.mUserDataType)
{
std::string factoryName = classnameAscii + " @" + classnameAscii + "()";
mScript.mUserDataFactory = mScript.mUserDataType->GetFactoryByDecl(factoryName.c_str());
}
}
}
And I call it in anglescript like:
class LightSource{...};
obj.SetObjectClass("Objects","LightSource");
Of course, now my code needs to know its module name and that is a little weird. Being able to access other modules (non shared) classes is also kind of strange (But maybe useful?).
But I was wondering if there was maybe a way to define a register a function prototype such that:
obj.SetObjectClass(LightSource);
Was the angelscript call side and this was the C++ side:
void ObjectData::SetObjectClass(asIObjectType* classname){...}
Because doing it by string lookup of module and typename seems like the long way to get a asIObjectType.
It sorta looks like I might be able to do it via templates if I can't pass types directly. Do template functions work?
obj.SetObjectClass<LightSource>(); maybe?
But I am a little uncertain how/when aslObjectType is passed after reading scriptarray.cpp.. though that is a template object, not template function.
Is there any included samples with template functions?