С помощью enum вы определяете новый тип в вашей программе.Этот тип ведет себя так же, как любой тип.Тогда передача по значению будет:
void myFunction( MYKEYS key );
И передача по ссылке:
void myFunction( MyKEYS& key );
Если ключ не будет изменен, лучше объявить константную ссылку:
void myFunction( const MyKEYS& key );
Относительно вектора:
Векторы всегда передаются по ссылке в C ++, и вам не нужен указатель для этого.Синтаксис немного отличается от нормального типа.
void myFunction( bool keyVector [ ] );
Передача по ссылке обычно лучше, чем указатель, потому что кто-то может передать NULL-указатель на вашу функцию и прервать программу, если вы не проверите указательранее.
В матрице (векторе векторов) вы должны указать все измерения, кроме первого:
bool keysOfKeys[4][3];
void myFunction( bool vector [ ] [ 3 ] );
Есть лучшая форма, чтобы сделать это без вектора bools.
Вы можете использовать операторы & (поразрядно и) и (| поразрядно или) и использовать каждый бит как логическое значение.Напомним, что перечисление ведет себя как 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
}