小编bpo*_*ter的帖子

在类中声明枚举

在下面的代码片段中,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-tr​​icks-2-better-enums.

(2)在这个例子中,当类中工作时,最好是将枚举编码为Car::Color,还是只需要Color?(我假设前者更好,以防万一Color在全局命名空间中声明了另一个枚举.这样,至少,我们明确指出我们所指的枚举.)

c++ enums scope namespaces class

140
推荐指数
4
解决办法
23万
查看次数

在C++中使用min和max函数

从C++,是minmax优选超过fminfmax?为了比较两个整数,它们是否提供基本相同的功能?

您是倾向于使用这些功能集中的一个还是更喜欢自己编写(可能是为了提高效率,可移植性,灵活性等)?

笔记:

  1. C++标准模板库(STL)在标准C++ 算法头中声明minmax函数.

  2. C标准(C99)提供标准C math.h标头中的函数fminfmax函数.

提前致谢!

c c++ max min

69
推荐指数
5
解决办法
26万
查看次数

函数声明只需要extern"C"吗?

我写了一个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)

c c++ extern extern-c

34
推荐指数
1
解决办法
2万
查看次数

使用父XML元素作为重复出现的子元素的容器?

假设您希望允许某些特定的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的建议,包括简单命名父母通过使用复数的重复子元素.

xml xsd coding-style

9
推荐指数
2
解决办法
3067
查看次数

标签 统计

c++ ×3

c ×2

class ×1

coding-style ×1

enums ×1

extern ×1

extern-c ×1

max ×1

min ×1

namespaces ×1

scope ×1

xml ×1

xsd ×1