最近在讀mxnet源碼的時候,發現一個全局作用域問題,初看不明所以,特此記錄分享;
*!
* \\brief Generic macro to register an EntryType
* There is a complete example in FactoryRegistryEntryBase.
* \\param EntryType The type of registry entry.
* \\param EntryTypeName The typename of EntryType, must do not contain namespace :: .
* \\param Name The name to be registered.
* \\sa FactoryRegistryEntryBase
*/
#define DMLC_REGISTRY_REGISTER(EntryType, EntryTypeName, Name) \\
static DMLC_ATTRIBUTE_UNUSED EntryType & __make_ ## EntryTypeName ## _ ## Name ## __ = \\
::dmlc::Registry<entrytype>::Get()->__REGISTER__(#Name) \\/<entrytype>
上述代碼中,用到了全局作用域/命名空間/類內靜態方法的引用三種作用域,其中全局作用域就是以“::”開頭,這點與命名空間dlmc以及類名Registry<entrytype>是有區別的。/<entrytype>
關於全局作用域,舉個簡單的例子:
- #include <iostream>
- int g_data = 10; // 具有全局作用域
- int main()
- {
- std::cout << g_data << std::endl; // 輸出10
- int g_data= 0;
- std::cout << g_data << std::endl; // 輸出0
- std::cout << ::g_data << std::endl; // 輸出10
- }
閱讀更多 rongzhenlee 的文章