= !ClassIdentifier =
----
{{{
#!html
}}}
'''Important: The [wiki:ClassIdentifier] is derived from [wiki:Identifier]. Read the related Wiki-page to learn about all inherited features and functions.'''
* '''Go to the [wiki:Identifier]'''
{{{
#!html
}}}
----
== Description ==
The ClassIdentifier is a template, inherited from [wiki:Identifier], containing all class-specific functions for the class represented by the [wiki:Identifier]. In fact this is only the [wiki:ObjectList].
The constructor of ClassIdentifier is private. Only [wiki:IdentifierDistributor] is allowed to create and distribute new instances. (In fact only '''one''' instance per template-class. This is '''very''' important.)
You can't access the ClassIdentifier of a class directly. Use [wiki:ClassManager]::getIdentifier() instead. A shorter version of this command is the macro Class(classname) (include [wiki:CoreIncludes CoreIncludes.h] to use it) that returns the ClassIdentifier of the given class.
== The !ObjectList ==
Every class that uses the !RegisterObject(classname) or !RegisterRootObject(interfacename) macro (see [wiki:CoreIncludes]) is represented by an [wiki:Identifier], that stores all objects of this class (and of all inherited classes) in a [wiki:ObjectList]. The object gets removed from the list if it gets deleted. This is handled by the destructor of [wiki:OrxonoxClass] and the [wiki:MetaObjectList].
You can iterate through all objects in a [wiki:ObjectList] by using an [wiki:Iterator]. Read the related Wiki-page to get more informations.
== Example ==
{{{
#!cpp
MyClass.h:
class MyClass : public BaseObject
{
MyClass();
};
}}}
{{{
#!cpp
MyClass.cc:
#include "CoreIncludes.h"
#include "MyClass.h"
MyClass::MyClass()
{
RegisterObject(MyClass);
}
}}}
{{{
#!cpp
SomeOtherFile.cc:
#include "CoreIncludes.h"
#include "MyClass.h"
Identifier* myidentifier = Class(MyClass);
std::cout << myidentifier->getName() << std::endl;
/*
returns:
MyClass
*/
}}}