Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C+中组织命令的最简洁的方法+; 我在QT 5.1 C++中编写一个程序,它将通过命令列表与ARDUINO板通信。这些命令最好存储在ascii码中,或易于转换为ascii码_C++_Qt - Fatal编程技术网

在C+中组织命令的最简洁的方法+; 我在QT 5.1 C++中编写一个程序,它将通过命令列表与ARDUINO板通信。这些命令最好存储在ascii码中,或易于转换为ascii码

在C+中组织命令的最简洁的方法+; 我在QT 5.1 C++中编写一个程序,它将通过命令列表与ARDUINO板通信。这些命令最好存储在ascii码中,或易于转换为ascii码,c++,qt,C++,Qt,我希望这些命令与下面的伪代码类似,无论是在初始化和声明方面,还是在本质上都是类型安全的 commandlist consisting of strings: { get = "1", //Ascii 1 set = "0" etc } 可以通过类似的方式访问 sendcommand(commandlist.get) etc 我知道有很多方法可以做到这一点,但哪种方法最简单?枚举类?Qt中的一些特殊功能?将所有命令定义为变量的命名空间 我想用静态变量作为命令的静态类,但当必须进行

我希望这些命令与下面的伪代码类似,无论是在初始化和声明方面,还是在本质上都是类型安全的

commandlist consisting of strings:
{
   get = "1",  //Ascii 1
   set = "0"
etc
}
可以通过类似的方式访问

sendcommand(commandlist.get) etc
我知道有很多方法可以做到这一点,但哪种方法最简单?枚举类?Qt中的一些特殊功能?将所有命令定义为变量的命名空间

我想用静态变量作为命令的静态类,但当必须进行初始化时,这几乎是整洁的

将a与字符串数组(或向量)结合使用:

#包括
#包括
枚举类命令类型
{
Get=0,
设置,//这将设置为1,以此类推。。。
...
};
// ...
const std::vector commandNames={“get”,“set”,…};
// ...
CommandType cmd=CommandType::Get;
自动命令名=命令名[static_cast(cmd)];
//在这里使用commandName
将a与字符串数组(或向量)结合使用:

#包括
#包括
枚举类命令类型
{
Get=0,
设置,//这将设置为1,以此类推。。。
...
};
// ...
const std::vector commandNames={“get”,“set”,…};
// ...
CommandType cmd=CommandType::Get;
自动命令名=命令名[static_cast(cmd)];
//在这里使用commandName

或类似的内容:

class Command {
public:
    Command (QByteArray const& ascii) :ascii_(ascii) {}
    QByteArray ascii_;
};

static const Command cmd_get("1");
static const Command cmd_set("0");

sendCommand(cmd_get);
sendCommand(cmd_set);
如果您不打算使用动态命令文本,可以使用
const char*

编辑实际上,将这些作为静态类成员可能会更好:

class Command {
public:
    static const Command GET;
    static const Command SET;

    explicit Command (QByteArray const& ascii) :ascii_(ascii) {}
    QByteArray const& getAscii() const { return ascii_; }

private:
    QByteArray ascii_;
};

// Implementation
const Command Command::GET("1");
const Command Command::SET("0");

sendCommand(Command::GET);
sendCommand(Command::SET);

此外,由于QByteArray使用隐式共享,因此类的副本相对便宜。

或类似的内容:

class Command {
public:
    Command (QByteArray const& ascii) :ascii_(ascii) {}
    QByteArray ascii_;
};

static const Command cmd_get("1");
static const Command cmd_set("0");

sendCommand(cmd_get);
sendCommand(cmd_set);
如果您不打算使用动态命令文本,可以使用
const char*

编辑实际上,将这些作为静态类成员可能会更好:

class Command {
public:
    static const Command GET;
    static const Command SET;

    explicit Command (QByteArray const& ascii) :ascii_(ascii) {}
    QByteArray const& getAscii() const { return ascii_; }

private:
    QByteArray ascii_;
};

// Implementation
const Command Command::GET("1");
const Command Command::SET("0");

sendCommand(Command::GET);
sendCommand(Command::SET);

此外,由于QByteArray使用隐式共享,因此类的副本相对便宜。

使用枚举而不是字符串,或者使用将这些枚举映射到字符串的映射。您可以使用模板表达式执行小型嵌入式DSL(域特定语言):)使用枚举而不是字符串,也许还有一个映射可以将这些枚举映射到字符串