在下面的代码片段中,Color
枚举是在Car
类中声明的,以便限制枚举的范围并尽量不"污染"全局命名空间.
class Car
{
public:
enum Color
{
RED,
BLUE,
WHITE
};
void SetColor( Car::Color color )
{
_color = color;
}
Car::Color GetColor() const
{
return _color;
}
private:
Car::Color _color;
};
Run Code Online (Sandbox Code Playgroud)
(1)这是限制Color
枚举范围的好方法吗?或者,我应该在Car
类之外声明它,但可能在它自己的命名空间或结构中声明它?我今天刚刚看到这篇文章,主张后者并讨论关于枚举的一些好点:http: //gamesfromwithin.com/stupid-c-tricks-2-better-enums.
(2)在这个例子中,当在类中工作时,最好是将枚举编码为Car::Color
,还是只需要Color
?(我假设前者更好,以防万一Color
在全局命名空间中声明了另一个枚举.这样,至少,我们明确指出我们所指的枚举.)
从C++,是min
和max
优选超过fmin
和fmax
?为了比较两个整数,它们是否提供基本相同的功能?
您是倾向于使用这些功能集中的一个还是更喜欢自己编写(可能是为了提高效率,可移植性,灵活性等)?
笔记:
提前致谢!
我写了一个C++函数,我需要从C程序调用.为了使它可以从C调用,我extern "C"
在函数声明中指定.然后我编译了C++代码,但编译器(Dignus Systems/C++)为该函数生成了一个错位的名称.所以,它显然没有尊重extern "C"
.
为了解决这个问题,我添加extern "C"
了函数定义.在此之后,编译器生成了一个可从C调用的函数名.
从技术上讲,extern "C"
唯一需要在函数声明中指定.这是正确的吗?(C++ FAQ Lite就是一个很好的例子.)你还应该在函数定义中指定吗?
这是一个证明这一点的例子:
/* ---------- */
/* "foo.h" */
/* ---------- */
#ifdef __cplusplus
extern "C" {
#endif
/* Function declaration */
void foo(int);
#ifdef __cplusplus
}
#endif
/* ---------- */
/* "foo.cpp" */
/* ---------- */
#include "foo.h"
/* Function definition */
extern "C" // <---- Is this needed?
void foo(int i) {
// do …
Run Code Online (Sandbox Code Playgroud) 假设您希望允许某些特定的XML元素出现0次以上.例如,<record>
元素可以多次出现:
<repository>
<record>Record 1</record>
<record>Record 2</record>
<record>Record 3</record>
</repository>
Run Code Online (Sandbox Code Playgroud)
是否有任何令人信服的理由将父元素作为容器包含在内?例如,以下使用<recordSet>
元素来包含<record>
元素:
<repository>
<recordSet>
<record>Record 1</record>
<record>Record 2</record>
<record>Record 3</record>
</recordSet>
</repository>
Run Code Online (Sandbox Code Playgroud)
在提出这个问题之前,我试图找到任何相关的问题,所以如果已经提出问题我会道歉.提前感谢任何和所有输入!
编辑 - 2009年7月22日:
感谢大家的出色反馈!(我会评论/投票给人,但我还没有足够的声望点.)我可能会继续这条路线,我也想感谢@ 16bytes的建议,包括简单命名父母通过使用复数的重复子元素.