Resource IDs

内容表

关于

Dedicated resource IDs are used to the define the ID of a key used with a maxon::DataDictionary and the type of the associated stored value (see DataDictionary Manual ).

IDs

Within a given namespace one can use the attribute MAXON_ATTRIBUTE to declare resource IDs. This attribute can only be used in a header file since the source processor will create additional code in the included hxx files.

// This example shows the simple declaration of some resource IDs in a header file. // The header file must also include the automatically generated .hxx files.

// custom namespace for IDs namespace CUSTOMSETTINGS { // declare IDs

MAXON_ATTRIBUTE ( maxon::Bool , SETTING_A, "net.maxonexample.setting_a" ); MAXON_ATTRIBUTE ( maxon::String , SETTING_B, "net.maxonexample.setting_b" ); }

// This example shows how to use IDs defined with MAXON_ATTRIBUTE // to set and get data stored in a DataDictionary.

maxon::DataDictionary data;

// set data data.Set(CUSTOMSETTINGS::SETTING_A, true ) iferr_return ; data.Set(CUSTOMSETTINGS::SETTING_B, "Hello World" _s) iferr_return ;

// read data const maxon::Bool optionA = data.Get(CUSTOMSETTINGS::SETTING_A, false ); const maxon::String optionB = data.Get(CUSTOMSETTINGS::SETTING_B, "" _s);

In contrast the attribute MAXON_ATTRIBUTE_LOCAL has to be used in a source code file to define IDs that are only relevant within the scope of that source code file.

// This example shows how to declare local IDs // and how to use them to edit a DataDictionary.

// define local resource IDs namespace LOCALSETTINGS { MAXON_ATTRIBUTE_LOCAL ( maxon::Bool , SETTING_A, "setting_a" ); MAXON_ATTRIBUTE_LOCAL ( maxon::String , SETTING_B, "setting_b" ); MAXON_ATTRIBUTE_LOCAL ( maxon::String , SETTING_C, "setting_c" ); }

// use local resource IDs static maxon::Result<void> SetSettings(maxon::DataDictionary& data) { iferr_scope ; data.Set(LOCALSETTINGS::SETTING_A, true ) iferr_return ; data.Set(LOCALSETTINGS::SETTING_B, "Hello" _s) iferr_return ; data.Set(LOCALSETTINGS::SETTING_C, "World" _s) iferr_return ; return maxon::OK ; }

Switch

To use IDs defined with MAXON_ATTRIBUTE in a switch-case statement one must use these macros:

// This example shows a function that checks // if the given key is a specific resource ID. static maxon::Result<void> ReadValue( const ConstDataPtr& key, maxon::DataDictionary& data) { switch ( ID_SWITCH (key)) { case ID_CASE (CUSTOMSETTINGS::SETTING_A): { const maxon::Bool option = data.Get(key, false ); DiagnosticOutput ( "Option A: @" , option); return maxon::OK ; } case ID_CASE (CUSTOMSETTINGS::SETTING_B): { const maxon::String option = data.Get(key, "" _s); DiagnosticOutput ( "Option B: @" , option); return maxon::OK ; } } return maxon::IllegalArgumentError( MAXON_SOURCE_LOCATION ); }

Class IDs

Resource IDs can also be defined within a C++ class using the MAXON_ATTRIBUTE_CLASS attribute. This way the class name is used instead of a namespace to group the IDs.

// This example shows a simple interface. Within the class the macro MAXON_ATTRIBUTE_CLASS // is used to declare resource IDs. These IDs can be used in conjuncture with functions of the interface. class SomeDataBaseInterface : MAXON_INTERFACE_BASES (maxon::ObjectInterface) { MAXON_INTERFACE (SomeDataBaseInterface, MAXON_REFERENCE_CONST , "net.maxonexample.interface.somedatabase" ); MAXON_INTERFACE_SINGLE_IMPLEMENTATION ; public : //---------------------------------------------------------------------------------------- // Sets the data in the database to the data stored in the given DataDictionary. // Values in the DataDictionary must be set using the key defined below. //---------------------------------------------------------------------------------------- static MAXON_METHOD void SetData(maxon::DataDictionary & data); //---------------------------------------------------------------------------------------- // Prints the data stored in the database to the IDE console. //---------------------------------------------------------------------------------------- static MAXON_METHOD void PrintData();

// keys for data stored in the database MAXON_ATTRIBUTE_CLASS ( maxon::Int , VALUE_A, "net.maxonexample.value_a" ); MAXON_ATTRIBUTE_CLASS ( maxon::String , VALUE_B, "net.maxonexample.value_b" ); };

// This example uses class IDs to set values in a // DataDictionary handed over to this class. maxon::DataDictionary data;

// set data data.Set(SomeDataBaseInterface::VALUE_A, maxon::Int (5)) iferr_return ; data.Set(SomeDataBaseInterface::VALUE_B, "Hello World" _s) iferr_return ; SomeDataBaseInterface::SetData(data); SomeDataBaseInterface::PrintData();

延伸阅读

MAXON_INTERFACE_SINGLE_IMPLEMENTATION
#define MAXON_INTERFACE_SINGLE_IMPLEMENTATION
定义: objectbase.h:997
MAXON_INTERFACE_BASES
#define MAXON_INTERFACE_BASES(...)
定义: objectbase.h:977
maxon::String
定义: string.h:1197
maxon::OK
return OK
定义: apibase.h:2532
maxon::Bool
bool Bool
boolean type, possible values are only false/true, 8 bit
定义: apibase.h:177
iferr_return
#define iferr_return
定义: resultbase.h:1434
MAXON_SOURCE_LOCATION
#define MAXON_SOURCE_LOCATION
定义: memoryallocationbase.h:66
MAXON_REFERENCE_CONST
#define MAXON_REFERENCE_CONST(DUMMY)
定义: interfacebase.h:1026
DiagnosticOutput
#define DiagnosticOutput(formatString,...)
定义: debugdiagnostics.h:166
maxon::Result< void >
MAXON_METHOD
#define MAXON_METHOD
定义: interfacebase.h:855
maxon::Int
Int64 Int
signed 32/64 bit int, size depends on the platform
定义: apibase.h:184
iferr_scope
#define iferr_scope
定义: resultbase.h:1343
MAXON_ATTRIBUTE_LOCAL
#define MAXON_ATTRIBUTE_LOCAL(TYPE, NAME, RID,...)
定义: fid.h:182
MAXON_INTERFACE
#define MAXON_INTERFACE(Name, REFKIND, ID)
定义: objectbase.h:1048
MAXON_ATTRIBUTE_CLASS
#define MAXON_ATTRIBUTE_CLASS(TYPE, NAME, RID,...)
定义: fid.h:165
ID_SWITCH
#define ID_SWITCH(key)
定义: fid.h:331
ID_CASE
#define ID_CASE(key)
定义: fid.h:344
MAXON_ATTRIBUTE
#define MAXON_ATTRIBUTE(TYPE, NAME, RID,...)
定义: fid.h:146

Copyright  © 2014-2025 乐数软件    

工业和信息化部: 粤ICP备14079481号-1