Sign in to follow this  

Passing types out?

Recommended Posts

BlackMoons    460

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{...};

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:


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?

Share this post

Link to post
Share on other sites
WitchLord    4677

Template functions is not yet a functionality that is implemented in AngelScript. But you could definitely create a template type that would allow you to get information on types. From the script it could look like this:




You could use the script array add-on as an example for creating this template type class.


You may even be able to reuse the code that InvalidPointer posted here:




Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this