2015-05-13 6 views
1

Я получаю жалобу от complier при попытке преобразовать массив enum в указатель int.лить массив enum для указателя int

void format(const int *values); 
// convert and call format 
format(static_cast<const int*>(EnumArray)); 

// error from compiler 
error: invalid static_cast from type 'const EnumArray[15]' to type 'const int*' 

Любой способ обойти его? Благодаря!

+0

Я думаю, вы должны обеспечить преобразование из 'EnumArray' в' int * '. Как еще должен компилятор знать, что делать? – user463035818

+2

Вы не можете преобразовать 'enum array' в' const int * '. Прежде всего, их типы различны, и даже их размер не гарантируется одинаковым. –

+0

'reinterpret_cast', если вам повезет. Используйте совместимые типы, если вы хотите исправить их правильно. –

ответ

1

Кажется, я могу решить проблему с шаблоном. Он компилируется и запускается.

template<typename T> 
    String8 format(const T *values) 
    { 
      //use values as array of int 
      int v = values[i]; 
    } 

    //call it 
    format(EnumArray); // no type needed since it can be deduced 
+0

Вы используете 'values' как массив' T', но 'values ​​[i]' ('T') преобразуется в' int'. Вам нужно будет явно преобразовать в 'int', если вы используете' enum class'. – Jarod42

0

Если вы точно знаете, что вы делаете, вы можете использовать reinterpret_cast.

format(reinterpret_cast<const int*>(EnumArray)); 
+3

Я бы добавил 'static_assert (std :: is_same :: type> :: значение," Недопустимый базовый тип перечисления ");' в этом случае. – Jarod42

 Смежные вопросы

  • Нет связанных вопросов^_^