根据我的理解,应该在类中声明与类相关的枚举,如下所示:
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;
我很清楚kSensorActive
和kSensorInactive
所指的内容非常明确,没有歧义。但是如果你试着遵循指定80个字符的样式指南,我们最终会有很多换行符,这会降低清晰度,恕我直言。如果我们有一个带两个不同枚举器的函数,就会出现一个长行的例子。 MyFunction(NamespaceA::MyFirstClass::MyFirstEnum::AnEnumerator, NamespaceB::MySecondClass::MySecondEnum::ADifferentEnumerator)
- 高达127个字符。
这些长名字是常见的还是我错过了什么?
答案 0 :(得分:4)
要在不降低整体范围清晰度的情况下缩短长度,您至少有两个选项:
using Status = Sensors::MySensor::SensorStatus;
typedef
即。 typedef Sensors::MySensor::SensorStatus Status2;
在此函数的范围内使用这些,因此它是本地的,并且模糊名称不会遍及整个代码。 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");
}
你以前用过的东西。