2
我碰到過這樣的伎倆來定義一個全局數組:模板招在頭
// This template utilizes the One Definition Rule to create global arrays in a header.
template<typename unused=void>
struct globals_struct
{
static const uint8 s_str_serialize_flags[256];
// ...
};
typedef globals_struct<> globals;
template<typename unused>
const uint8 globals_struct<unused>::s_str_serialize_flags[256] =
{
// ... data here ...
};
// ... and then the array is accessible as:
uint8 value = globals::s_str_serialize_flags[index])
此代碼是從豐富Geldreich的Purple JSON,我從乍得奧斯汀的blog瞭解。
在看到這段代碼之前,我認爲只有標題庫中有一個數組的唯一方法是要求用戶在一個文件中(包括標題之前)對#define
一個魔術宏。
所以我喜歡的模板,包裝伎倆,但我想知道:
- 它是一個C++成語(它有一個名字)?
- 它是否符合標準並且安全使用?
- 是這樣一個模板包裝最簡單的方法在頭中有一個數組?
編輯: 我只是在一個SO answer跨相同特技來到其中顯示作爲一種替代C++ 17個內嵌變量。
'錯誤: '值' 中聲明 '靜態'' constexpr'function' – marcin
@marcin:可悲的是它不允許這種方式: - /通過替代方法修正(保留'constexpr')。 – Jarod42