Интерфейс должен позволять чтение/запись на все микросхемы с разными битами адреса и размеры регистров (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