Использование типизированного аргумента шаблона со значением по умолчанию в качестве абстрактного класса в С++C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Использование типизированного аргумента шаблона со значением по умолчанию в качестве абстрактного класса в С++

Сообщение Anonymous »

Используя C++20, у меня есть следующая идея обобщить доступ к нескольким микросхемам в схеме:
Интерфейс должен позволять чтение/запись на все микросхемы с разными битами адреса и размеры регистров (8, 16, ...)

Код: Выделить всё

template
requires (AddressBits < ContentBits)
class MyInterface {
protected:
std::bitset mAddress;
std::bitset mValue;

public:
virtual ~MyInterface() = 0;

virtual std::bitset read() = 0;

virtual bool write(const std::bitset &value) = 0;
};
Теперь, допустим, мне нужно прогнать из приведенного выше интерфейса пару чипов с разными адресами и размерами содержимого, т.е. один , а другой .
Как мне это сделать? имеет ли это вообще смысл? Я написал код ниже, но он не поддерживает мою первоначальную идею:

Код: Выделить всё

class DRV8323 : public MyInterface {
explicit DRV8323(unsigned int address, unsigned int resetValue = 0) {
mAddress = address;
mValue = resetValue;
}
~DRV8323() override = default;

std::bitset read() override {
// Somehow read from hardware and return
return mValue;
}

bool write(const std::bitset &value) override {
// Somehow write to hardware and return true/false to indicate result
return true;
}
};

// or vector
std::vector AllRegisters = {
{ /* How to add two different derived classes/chips? */ },
{ /* How to add two different derived classes/chips? */ },
// And so on
};
  • Для функции чтения мне нужно явно указать число... Есть ли способ автоматически вычесть его из MyInterface< /code>?
  • Допустим, я добавляю еще один чип с 9-битным адресом и 32-битным содержимым. Как мне тогда иметь вектор в глобальной области видимости, содержащий регистры из обоих производных классов:


Подробнее здесь: https://stackoverflow.com/questions/792 ... class-in-c
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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