在我看来,当有人放入一个恰好与根级命名空间同名的新命名空间并且神秘地改变了许多程序的含义时,使用未锚定的命名空间只会引发麻烦.那么,为什么人们总是说std::而不是::std::.他们真的应该说"我想用任何std方便的东西,而不是根本的东西."?
这是我的意思的一个例子:
在fred/Foo.h中:
#include <string>
namespace fred {
class Foo {
public:
void aPublicMember(const std::string &s);
};
} // end namespace fred
Run Code Online (Sandbox Code Playgroud)
在fred/Bar.h中:
namespace fred {
namespace std { // A standard fred component
class string { // Something rather unlike the ::std::string
// ...
};
} // namespace std
class Bar {
public:
void aPublicMember(std::string &s);
};
} // namespace fred
Run Code Online (Sandbox Code Playgroud)
在oops.cpp中:
#include <string>
#include "fred/Bar.h"
#include "fred/Foo.h" // Oops, the meaning of …Run Code Online (Sandbox Code Playgroud) 如果我有一些像这样的枚举
typedef enum {
AN_TRISTATE_0,
AN_TRISTATE_1,
AN_NOTHING,
AN_MOTOR_1,
AN_MOTOR_2,
AN_MOTOR_3,
AN_SENSOR_1,
AN_SENSOR_2,
AN_SENSOR_3,
AN_SENSOR_4,
AN_SENSOR_5
} adc_pin_func_t;
Run Code Online (Sandbox Code Playgroud)
和
adc_pin_func_t a_particular_pin = ...
Run Code Online (Sandbox Code Playgroud)
是否有可能检查引脚是否属于特定组,例如引脚是其中的一部分AN_MOTOR或部分AN_SENSOR,而不是必须检查每个可能组中的每个项目.
或者除了使用枚举之外,还有更有效的方法吗?
提前致谢
在 Java 中,您可以为枚举编写构造函数,例如
private MyEnum(String name, int val) {
...
}
Run Code Online (Sandbox Code Playgroud)
然后你可以写:
public enum MyEnum {
FIRST("A", 10), SECOND("B", 20), THIRD("C", 30);
private MyEnum(String name, int val) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
有什么办法可以为 C++ 枚举类做类似的事情吗?
我想知道一些非常有用且特定于java的功能.因为我是java开发人员,当人们问我一些很好的编程功能,这些功能在java中没有,而不是任何其他语言,那么你认为我可以告诉他们.
也就是说,如果我告诉他们这些功能,那么他们应该发现我是一名java开发人员.