我有一个带有四个键的枚举我正在作为接口程序的输入,我想通过值将枚举传递给接口函数,这已经变得很长了。枚举是这样的:
enum MYKEYS {
W, S, O, L
};
还有一个布尔数组,我必须通过引用传递,这也有点棘手。
bool key[4] = { false, false, false, false };
有没有人知道在函数中将这两个作为引用传递的正确语法,类似于:
function(int & anintreference);
答案 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){
//
}