Использование типизированного аргумента шаблона со значением по умолчанию в качестве абстрактного класса в С++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

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