Как я могу использовать перечисления в качестве аргументов для функций, которые принимают в качестве аргументов ссылки, C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу использовать перечисления в качестве аргументов для функций, которые принимают в качестве аргументов ссылки,

Сообщение Anonymous »

У меня есть одна библиотека для интерфейса с устройствами I2C (чтение/запись), а другая действует как драйвер для конкретного устройства I2C. Здесь я пытаюсь сделать две несколько независимые вещи:
  • Отформатировать мои функции чтения/записи I2C так, чтобы они действовали на ссылочные входные данные и возвращали логическое значение для использования. для обработки ошибок.
  • Используйте перечисления в коде драйвера, чтобы избежать магических чисел.
В целом такое ощущение как будто должен быть лучший способ сделать это, поэтому я ищу любые предложения о том, как это сделать без reinterpret_cast, при этом достигая целей. Я не хочу добавлять перегрузку для перечисления и надеюсь избежать создания временных переменных.
Когда я пытаюсь прочитать регистр устройства в переменную, объявленную как одну из enum-типы, я получаю несколько разновидностей ошибок о невозможности преобразования между перечислениями и другими типами. Я думаю, что смогу заставить его работать с reinterpret_cast, но у меня сложилось впечатление, что этого следует избегать, когда это возможно.

Я сжал свою реальную программу в репрезентативный пример, показанный ниже.
#include
#include

// i2cCommunication.h GENERIC I2C COMMUNICATION FILE

// This function is part of a generic library that cannot see the enum definition
bool read(uint8_t& input_ref)
{
if(!true) // This would be where you write the device address to the I2C bus and see if it was acknowledged
{
return false;
}

input_ref = 0b01; // This would be where you actually read from the device
return true; // This bool would be set by a separate function that reports read status
}

// driver.h DEVICE DRIVER FILE

// #include "i2cCommunication.h"
// This enum is defined in a header for a device "driver"
enum GainLevel
{
GAIN1 = 0b00,
GAIN2 = 0b01
};

GainLevel gain = GAIN1;

bool updateGainLevel()
{
if(read(static_cast(gain)))
{
std::cout

Подробнее здесь: https://stackoverflow.com/questions/783 ... ences-as-a
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»