2011-05-26 281 views
3

我想在我的当前(C++)项目的客户端和服务器部分使用相同的枚举,但我不确定正确的方法来做到这一点。我可以很容易地将enum写入它自己的文件中,并将它包含在两个文件中,但是这感觉这是不好的练习。将它放在一个名称空间中,然后将它包括在内是正确的方法吗?跨多个文件共享枚举的正确方法是什么?

我知道这有点主观,如果有更好的地方提供“最佳实践”的问题,请直接告诉我。

编辑(细化):我从客户端发送数据到服务器,在这种情况下,我想告诉客户有关状态的变化。但是,我想避免发送构成状态的所有信息,每次我想要更改它时,我只想发送一个引用数组中索引的数字。所以,我认为最好的办法是使用枚举,但是我需要在客户端和服务器端都使用相同的枚举,以便他们都能理解数字。希望这是有道理的。

+0

这两种方式都是一样的东西,而是一个涉及到一个命名空间。您仍然必须在客户端和服务器中都包含一个文件。我可能会去你的名字空间,然后把'enum'放进它里面。 – birryree 2011-05-26 02:29:27

+0

如果你需要这样做,你可能会做错事情......你能详细说明一下吗? – Claudiu 2011-05-26 02:31:08

+0

Woops最近做了很多python,意在说包括。编辑。 – rofer 2011-05-26 10:03:43

回答

8

将它放在头文件中看起来很合理,并且将它包装在名称空间中也可能很有用。我发现自己用枚举做的事情是

whatevsenum的内容。HPP:

namespace whatevs 
{ 
    enum Enum 
    { 
     FOO = 0, 
     BAR, 
     BLARGH, 
     MEH, 
     SIZE 
    }; 
} // namespace whatevs 

,然后每当我需要在其他地方页眉/源文件使用它:

#include "whatevsenum.hpp" 

void do_something_with(whatevs::Enum value) 
{ 
    // do stuff 
} 

... 

do_something_with(whatevs::FOO); 
8

TL;博士: 把它放在一个头文件(* .h)中和#include头文件,无论你需要使用枚举。

注意:这也适用于新的(C++ 11)enum classes

使用名称空间不是必需的。在多个地方包括头文件(不是.cpp文件)在大多数情况下是常见的和必要的。作为一般规则(这包括类定义,结构定义和是,enum定义),头文件应只包括函数/方法声明和类型定义。模板函数和方法还需要在头文件中定义为定义为(不仅仅是宣称为)。

要记住头文件的另一件事是,你应该总是使用include guard来避免多个定义。

This FAQ可能会有帮助,但如果你需要一个更完整的介绍C++

声明可能不会有足够的:

void foo(int bar); //Goes in a header file 

class argle; 

定义:

// Put this in a .cpp file 
int foo(int bar) { 
    return bar - 42; 
}; 

// Put this in a header file 
template<type T> 
int baz(T t) { 
    return 42; 
} 

// Put this in a header file 
struct bargle { 
    int fizz; 
    char *whizz; 
} 

编辑:

找到this,它应该帮助您理解要放入哪些文件。实际上,这整个wikibook看起来对于C++学习者来说是一个很好的资源:http://en.wikibooks.org/wiki/C%2B%2B_Programming

相关问题