你如何通过引用传递枚举?

时间:2011-03-05 23:54:52

标签: c++ enums

我有一个带有四个键的枚举我正在作为接口程序的输入,我想通过值将枚举传递给接口函数,这已经变得很长了。枚举是这样的:

enum MYKEYS {
  W, S, O, L
};

还有一个布尔数组,我必须通过引用传递,这也有点棘手。

bool key[4] = { false, false, false, false };

有没有人知道在函数中将这两个作为引用传递的正确语法,类似于:

function(int & anintreference);

4 个答案:

答案 0 :(得分:7)

您无法将enum本身作为函数的参数传递! enum定义了一种新类型,您可以创建此类型的变量,该变量可以采用enum定义的值之一:

MYKEYS k = W;

只有这样你才能通过引用传递k

function foo(MYKEYS& k_);

关于你的第二个问题,因为你应该把数组看作指向一系列bool的指针:

function bar(bool* key, int length);

答案 1 :(得分:3)

对于bool数组,只需要一个bool* keys指针。这是有效的,因为数组在传递给函数时会衰减为指针:

bool key[4] = {false, false, false, false};
void FuncThatTakesABoolArray(bool* keys){
    bool key1 = keys[0];
    // etc...
}

对于enum,Greg已经回答了这个问题。

答案 2 :(得分:0)

使用枚举,您将在程序中定义一个新类型。此类型的行为与任何类型相同。然后传递值为:

void myFunction( MYKEYS key );

通过参考传递:

void myFunction( MyKEYS& key );

如果不修改key,最好是声明const引用:

void myFunction( const MyKEYS& key );

相对于矢量:

向量总是在C ++中通过引用传递,并且您不需要指针来执行此操作。语法与普通类型略有不同。

void myFunction( bool keyVector [ ] );

通过引用传递通常比指针更好,因为如果你之前没有检查指针,有人可以将NULL指针传递给你的函数并破坏程序。

在矩阵中,(向量矢量)必须指定除第一个之外的所有维度:

bool keysOfKeys[4][3];

void myFunction( bool vector [ ] [ 3 ] );

如果没有bool矢量,有一种更好的形式可以做到这一点。

您可以使用运营商& (按位和)和(|按位或)并将每个位用作布尔值。提醒枚举表现为int。

例如,如果用户按下了键W和S.

enum MYKEYS
{
    W = 1<<0, // ..0001 ( binary ) 
    S = 1<<1, // ..0010 ( binary )
    O = 1<<2, // ..0100 ( binary )
    L = 1<<3 //  ..1000 ( binary )
};

MYKEYS k;
k = W | S;      // W and S pressed: ..0011 ( binary )

void myFunction( eKey key )
{
    // ..0011 & ..0001 -> ..0001
    if (  ( key  & W ) == W ); // key W pressed 

   // ..0011 & ..0010 -> ..0010
   if( ( key & S ) == S ); // key S pressed
}

答案 3 :(得分:0)

在你的程序中使用这种方式:

foo(*new MYKEYS(MYKEYS::W));

foo decleration / definition就是这样:

void foo(MYKEYS &newMYKEYS){
    //
}