枚举到数组绑定
Enums to Array bindings
枚举与其相应的数组之间的紧密绑定可以吗
请注意,这些只是为了理解而编写的伪代码。
方法1。一种方法是创建声明并定义数组
enum Names
{
ABC,
DEF,
GHI
};
char* names[] = {"abc", "def", "ghl"}; // Declare and define.
为了获得价值,我们将进行
char *nm = names[ABC];
这种方法的缺点是,我们需要保持枚举和名称数组同步,即如果我们更改枚举,我们会移动某些值,这些值也需要在表中完成
例如:将DEF移动到枚举的顶部
enun名称{DEF,ABC,GHI};
//也可以更改数组。
char*names[]={"def","abc","ghi"}
方法2.
打破枚举和数组之间绑定的一种方法是使用如下所示的create函数。
int CreateNamesArray(({
Names[GHI] = "ghl";
Names[DEF] = "def";
Names[GHI] = "ghi";
};
现在这样,即使枚举发生更改,数组也不会受到影响。这种方法的一个缺点是,我们需要在访问表之前调用函数。
请建议哪种方法更好。这些表格大约有30-100个条目。
您可以使用宏生成它们:
#define LIST
PAIR(ABC, "abc")
PAIR(DEF, "def")
PAIR(GHI, "ghi")
#define PAIR(key, value) key,
enum Names { LIST };
#undef PAIR
#define PAIR(key, value) value,
char* names[] = { LIST };
#undef PAIR
#undef LIST
更改LIST
内部的对以设置键/值对。
不使用宏:
#include <iostream>
enum Names { ABC, DEF, GHI };
template< Names n > struct Name { static const char *val; };
template<> const char *Name<ABC>::val = {"abc"};
template<> const char *Name<DEF>::val = {"def"};
template<> const char *Name<GHI>::val = {"ghi"};
int main() {
std::cout << Name<ABC>::val << std::endl;
std::cout << Name<DEF>::val << std::endl;
std::cout << Name<GHI>::val << std::endl;
return 0;
}
我推荐Boost。实现这一点的预处理器:
#include <boost/preprocessor.hpp>
#define DECLARE_PAIRS_ENUM_ELEMENT(r, d, e) BOOST_PP_TUPLE_ELEM(2, 0, e),
#define DECLARE_PAIRS_STRING_ELEMENT(r, d, e) BOOST_PP_TUPLE_ELEM(2, 1, e),
#define DECLARE_PAIRS(n, s)
enum n##Names { BOOST_PP_SEQ_FOR_EACH(DECLARE_PAIRS_ENUM_ELEMENT, _, s) };
std::string n##Strings[] =
{ BOOST_PP_SEQ_FOR_EACH(DECLARE_PAIRS_STRING_ELEMENT, _, s) };
DECLARE_PAIRS(
someList,
((DEF, "ABC"))
((ABC, "DEF"))
((GHI, "GHI"))
);
相关文章:
- 结构化绑定初始值设定项表单 { 赋值表达式 } 对于 clang 上的数组类型失败
- Python C 绑定 - 获取从 python 到 C++ 的数组
- 函数参数绑定通过参考与传递指针传递数组的规则
- 删除动态数组后,其绑定的某些值不会更改.为什么
- 如何在数组中使用结构化绑定作为ARG传递给某些函数
- 运算符>>在具有 std::ignore 的绑定元组上
- | 9 |错误:非静态数据成员'matrix :: row'| 9 |错误:数组绑定不是在']']'令牌|之前的整数常数
- 在编译时初始化一个C++结构,就像一个未知绑定的数组
- libpqxx:如何绑定参数数组
- opengl:两个不同的矢量可以绑定到同一个顶点数组对象吗
- Node-ffi 绑定到 NULL 终止的 C 字符串数组,但得到“分段错误:11”
- 为什么 const 数组优先绑定到 const T& 参数而不是 T&& 参数?
- 将数组绑定双倍到双*&
- 临时常量数组未绑定到右值引用
- C++中数组的静态绑定检查
- 为什么引用数组的语法需要(&arr)而不是(arr&)。另外,它如何帮助绑定检查?
- 在C++中,动态数组与静态绑定数组有何不同
- 直接从数组读取时超出了绑定地址
- 将数组绑定到sql参数
- 如何绑定/关联一个对象引用与new[](数组)