Original Post
I'm created a template class,
[source lang="cpp"]
r = engine->RegisterObjectType("myObj", 0, asOBJ_REF | asOBJ_NOCOUNT); X_ASSERT0(r >= 0);
r = engine->RegisterObjectType("x", 0, asOBJ_REF | asOBJ_TEMPLATE); assert( r >= 0 );
r = engine->RegisterObjectBehaviour("x", asBEHAVE_FACTORY, "x@ f(int∈)",
asFUNCTIONPR(xFactory, (asIObjectType*), x*), asCALL_CDECL); assert( r >= 0 );
r = engine->RegisterObjectBehaviour("x", asBEHAVE_ADDREF, "void f()",
asMETHOD(x, addRef), asCALL_THISCALL); assert( r >= 0 );
r = engine->RegisterObjectBehaviour("x", asBEHAVE_RELEASE, "void f()",
asMETHOD(x, release), asCALL_THISCALL); assert( r >= 0 );
[/source]
then compile my test as code.:
[source lang="cpp"]
void test()
{
x xxx;
}
[/source]
running it will got an error:
ERR : No default constructor for object of type 'x'.
currently, my solution is use template specializations, register a factory for all my object types.
[source lang="cpp"]
r = engine->RegisterObjectType("myObj", 0, asOBJ_REF | asOBJ_NOCOUNT); X_ASSERT0(r >= 0);
r = engine->RegisterObjectType("x
r = engine->RegisterObjectBehaviour("x
asFUNCTIONPR(xFactory, (asIObjectType*), x*), asCALL_CDECL); assert( r >= 0 );
r = engine->RegisterObjectBehaviour("x
asMETHOD(x, addRef), asCALL_THISCALL); assert( r >= 0 );
r = engine->RegisterObjectBehaviour("x
asMETHOD(x, release), asCALL_THISCALL); assert( r >= 0 );
[/source]
then compile my test as code.:
[source lang="cpp"]
void test()
{
x
}
[/source]
running it will got an error:
ERR : No default constructor for object of type 'x'.
currently, my solution is use template specializations, register a factory for all my object types.