Вы должны снова внимательно прочитать весь абзац.
Все поддерживаемые типы C имеют соответствующие представления в Kotlin:
- Перечисления могут быть сопоставлены с перечислением Kotlin
Также в C есть lvalue и rvalue (в C ++ эквивалент равен Type &
для lvalue и Type
для rvalue).Основное отличие состоит в том, что для lvalues может быть установлено какое-то значение, тогда как rvalues не может быть изменено после инициализации.Таким образом, для каждого типа в C вам нужен свой собственный тип Kotlin для lvalue и для rvalue.
В теме
Все поддерживаемые типы C имеют соответствующие представления в Kotlin:
учитываются только значения.Но для lvalues вам нужно только добавить Var
в конец типа.Единственное исключение:
Для структур (и typedefs для структур) это представление является основным и имеет то же имя, что и сама структура
Теперь давайте вернемся к перечислениям,Регулярные перечисления Kotlin отображаются в регулярные перечисления C.Так что на самом деле FIRST
и SECOND
имеют тип MyEnum
на обоих языках.Но что, если вы хотите создать переменную, содержащую MyEnum
, например:
// This is C Code
MyEnum a = FIRST;
a
имеет тип MyEnum
в C, но это lvalue (в C ++ это MyEnum &
), поэтому вKotlin a
будет иметь тип MyEnumVar
, потому что это именно то, что сказано в документации: ${type}Var
, где ${type} = MyEnum
.
На следующие вопросы:
ТипАргумент T CPointer должен быть одним из типов "lvalue"
Так что для struct S*
это должно быть CPointer<SVar>
, но помните, что struct
s являются исключениями, и мы не должны добавлять Var
, так что это просто CPointer<S>
.
int8_t*
- это CPointer<int_8tVar>
- здесь не исключение. char*
- это CPointer<ByteVar>
- опять не исключение (только lvalue-типы, кроме структур). char**
- это CPointer<CPointerVar<ByteVar>>
, поскольку нам нужно lvalue для CPointer<ByteVar>
, и это точно CPointerVar<ByteVar>
.
Наконец: IntVar
, LongVar
, CPointerVar<T>
и другие вещи являются значениями типов int
, long
, CPointer
.Это может понадобиться, если вы хотите изменить объект в функции.Что-то вроде Ref<${type}>
в Java.