Apollo  6.0
Open source self driving car software
class_loader_register_macro.h
Go to the documentation of this file.
1 /******************************************************************************
2  * Copyright 2018 The Apollo Authors. All Rights Reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *****************************************************************************/
16 
17 #ifndef CYBER_CLASS_LOADER_CLASS_LOADER_REGISTER_MACRO_H_
18 #define CYBER_CLASS_LOADER_CLASS_LOADER_REGISTER_MACRO_H_
19 
21 
22 #define CLASS_LOADER_REGISTER_CLASS_INTERNAL(Derived, Base, UniqueID) \
23  namespace { \
24  struct ProxyType##UniqueID { \
25  ProxyType##UniqueID() { \
26  apollo::cyber::class_loader::utility::RegisterClass<Derived, Base>( \
27  #Derived, #Base); \
28  } \
29  }; \
30  static ProxyType##UniqueID g_register_class_##UniqueID; \
31  }
32 
33 #define CLASS_LOADER_REGISTER_CLASS_INTERNAL_1(Derived, Base, UniqueID) \
34  CLASS_LOADER_REGISTER_CLASS_INTERNAL(Derived, Base, UniqueID)
35 
36 // register class macro
37 #define CLASS_LOADER_REGISTER_CLASS(Derived, Base) \
38  CLASS_LOADER_REGISTER_CLASS_INTERNAL_1(Derived, Base, __COUNTER__)
39 
40 #endif // CYBER_CLASS_LOADER_CLASS_LOADER_REGISTER_MACRO_H_