枚举,类,命名空间和长名称

时间:2018-04-06 06:33:55

标签: c++ enums

根据我的理解,应该在类中声明与类相关的枚举,如下所示:

namespace Sensors {
class MySensor {
 public:
     enum class SensorStatus {
         kSensorActive,
         kSensorInactive
     }
     SensorStatus GetCurrentStatus(void);
};
}

我遇到的问题是,它会在程序的另一部分导致以下代码。

 Sensors::MySensor::SensorStatus current_status = mySensor.GetStatus();
 switch (current_status):
     case Sensors::MySensor::SensorStatus::kSensorActive:  // 47 characters!
          printf("Sensor is active.");
          break;
     case Sensors::MySensor::SensorStatus::kSensorInactive:  // 49 characters!
          printf("Sensor is inactive.");
          break;

我很清楚kSensorActivekSensorInactive所指的内容非常明确,没有歧义。但是如果你试着遵循指定80个字符的样式指南,我们最终会有很多换行符,这会降低清晰度,恕我直言。如果我们有一个带两个不同枚举器的函数,就会出现一个长行的例子。 MyFunction(NamespaceA::MyFirstClass::MyFirstEnum::AnEnumerator, NamespaceB::MySecondClass::MySecondEnum::ADifferentEnumerator) - 高达127个字符。

这些长名字是常见的还是我错过了什么?

2 个答案:

答案 0 :(得分:4)

要在不降低整体范围清晰度的情况下缩短长度,您至少有两个选项:

  1. 别名类型即。 using Status = Sensors::MySensor::SensorStatus;
  2. A typedef即。 typedef Sensors::MySensor::SensorStatus Status2;
  3. 在此函数的范围内使用这些,因此它是本地的,并且模糊名称不会遍及整个代码。 Here is a live example.

答案 1 :(得分:4)

首先,你重复一遍:

如果您已指定名称中的kSensorActive,则Sensor名称不必说SensorStatus。或者,如果Sensor内有SensorStatus,则可以从MySensor移除using。也许两者都有。

在类和命名空间中包装内容背后的想法是,你可以一遍又一遍地使用相同的名称,因为这是“#34;同样的事情”,而不是在整个过程中使用完全唯一的名称。

您也可以在本地使用using Status = Sensors::MySensor::SensorStatus; 更改名称,类似

Status::kSensorActive

然后我们#include<stdio.h> #include<stdlib.h> int amtValues; int *values; float find_median (int* values){ if(amtValues%2==0){ return ((values[amtValues/2] + values[amtValues/2 -1]) /2.0); } else return values[amtValues/2]; } int main(int argc, char **argv){ //open the file, copy the data from the file, and determine the number of values //open the filestream FILE* fp = fopen(argv[1], "r"); if(!fp){ printf("error reading file\n"); return 1; } //determine the number of values char *lineOne; if(fgets(lineOne, 80, fp)!=1) puts (lineOne); lineOne++; amtValues = atoi(lineOne); printf("\nThe amount of values is: %d\n",amtValues); /*allocate memory for values array, and copy the values from file.*/ values = (int*)malloc(amtValues*sizeof(int)); int i=0; while(!feof(fp)){ int curNum; fscanf(fp, "%d", &curNum); values[i] = curNum; i++; } fclose(fp); for(i=0; i<amtValues; i++) printf("\n%d"); } 你以前用过的东西。