一个长度可变的数组结构体的用法(命名空间的用法)

原创 2015年11月18日 16:10:57

结构定义如下:

namespace QEvdevKeyboardMap {

    struct Mapping {
        quint16 keycode;
        quint16 unicode;
        quint32 qtcode;
        quint8 modifiers;
        quint8 flags;
        quint16 special;

    };
	#define MAX_COMPOSING_STEPS	6
    struct Composing {
        quint8 type;
	quint32 result;
	struct
	{
	    quint32 qtcode; 			// QT code
	    bool pressed;			// Pressed or released			
	    quint32 holdtime;			// Hold time, unit: ms			
	}step[MAX_COMPOSING_STEPS+1];           // The last one mark end     
    };
}

这里定义的是一个组合按键的结构,后面的这个数组长度可以变,实例如下:
#define ONE_KEY_LONG_PRESS      0x01
#define TWO_KEY_LONG_PRESS      0x02
#define THREE_KEY_LONG_PRESS    0x03

const QEvdevKeyboardMap::Composing QEvdevKeyboardHandler::s_keycompose_default[] = {
    {ONE_KEY_LONG_PRESS,     0x01000290,{{0x0100024a,true,5000},{0,false,0}}}, // One key long press
    {TWO_KEY_LONG_PRESS,     0x01000291,{{0x01000265,true,2000},{0x01000264,true,2000},{0,false,0}}}, // Two key long press 
    {TWO_KEY_LONG_PRESS,     0x01000292,{{0x01000260,true,2000},{0x0100025f,true,2000},{0,false,0}}}, // Two key long press 
    {THREE_KEY_LONG_PRESS,   0x01000293,{{0x01000267,true,2000},{0x01000266,true,2000},{0x01000265,true,2000},{0,false,0}}}, // Threee key long press
};

由于这个数组的成员可能很多,所以它被定义在一个单独的头文件中。注意这里对该数组进行初始化时的引用方法:

const QEvdevKeyboardMap::Composing  QEvdevKeyboardHandler::s_keycompose_default[]


这里用了一个命名空间QEvdevKeyboardHandlers_keycompose_default[] 定义在类QEvdevKeyboardHandler
class QEvdevKeyboardHandler : public QObject
{
    ......
    static const QEvdevKeyboardMap::Composing s_keycompose_default[];
};

用起来还是蛮方便的:

m_keycompose = s_keycompose_default;
m_keycompose_size = sizeof(s_keycompose_default) / sizeof(s_keycompose_default[0]);

版权声明:本文为博主原创文章,未经博主允许不得转载。

变长数组(动态数组)

1.变长一维数组   这里说的变长数组是指在编译时不能确定数组长度,程序在运行时需要动态分配内存空间的数组。实现变长数组最简单的是变长一维数组,你可以这样做: //文件名: array01.c...

结构体中最后一个数组长度为零

  • 2010年11月07日 11:57
  • 41KB
  • 下载

全面总结sizeof的用法(定义、语法、指针变量、数组、结构体、类、联合体、位域位段)

一、前言 编译环境是vs2010(32位)。 #include     #include     #include using namespace std; typedef struct {     ...

C++反汇编->类,结构体,命名空间分析

C++反汇编->类,结构体,命名空间分析

C++学习笔记1(结构体,命名空间,标准输入输出,引用,函数,构造函数)

1.C++是对C的增强.C++能够调用C的代码.C是面向过程,注重如何实现算法.而C++则是面向对象,注重如何更好地使用方法. 2.结构体在C++中,考虑到C语言到C++语言过渡的连续性,对结构体进行...
  • ccj659
  • ccj659
  • 2016年08月31日 09:41
  • 984

标准C++编程学习第一天之C++命名空间&结构体的定义和使用

/* // 描述: 标准C++编程学习第一天之C++命名空间&结构体的定义和使用 // 文件名: bank.c // 作者: 一叶知秋 // 时间: 2014-0-04 */ #include //...
  • zhi_qiu
  • zhi_qiu
  • 2014年08月04日 23:11
  • 459

在结构体最后定义一个长度为0的字符数组(技巧)

最近看tty驱动源码,发现了一个以前老板上课时讲过的一个c语言技巧,不是很理解,上网学习了一下,总结如下:   在linux源码里 struct tty_buffer {  struct tty...

在结构体最后定义一个长度为0的字符数组

在linux源码里 struct tty_buffer { struct tty_buffer *next; char *char_buf_ptr; unsigned char *flag_b...
  • tgzjz
  • tgzjz
  • 2015年06月30日 15:36
  • 853

关于零长度的数组——结构体最后一个成员char[0]和char[1]

关于零长度的数组 首先,我们要知道,0长度的数组在ISO C和C++的规格说明书中是不允许的。这也就是为什么在VC++2012下编译你会得到一个警告:“arning C4200: 使用了非标准扩...
  • typ2004
  • typ2004
  • 2015年04月15日 10:58
  • 1432

在结构体最后定义一个长度为0的字符数组(技巧)

在结构体中定义零长数组的巧妙使用
  • ZWFGOGO
  • ZWFGOGO
  • 2016年05月11日 20:10
  • 305
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个长度可变的数组结构体的用法(命名空间的用法)
举报原因:
原因补充:

(最多只允许输入30个字)