Есть базовый класс настройки IO
Я выкинул все лишние
class BaseIO {
public:
template<typename TClass>
static void AlternateInit(AlternateParameters val) {
TClass io = { val.port, val.pin };
io.SetAlternate(val.alternate);
return io.SetParameters({ Mode::Alternate });
}
template<typename TClass>
static void AnalogInit(AnalogParameters val) {
TClass io = { val.port, val.pin };
return io.SetParameters({ Mode::Analog, val.pull });
}
};
FА где-то ниже есть такая конструкция
using IO = class IOPort;
class IOPort : public BaseIO {
};
Все это создано для того, чтобы можно было сделать некоторые конфигурации, где класс по сути должен родиться и умереть (не надо хранить его в памяти), в одну строку
Сейчас это делается ка-то так
IOPort::AlternateInit<IOPort>({ .... });
А хотелось бы что-то такое
IOPort::AlternateInit({ .... });
Конечно, можно определять AnalogInit и AlternateInit в каждом потомке, но они должны быть статик чтобы можно было писать одной строкой. И тут проблема, виртуальный метод не может быть статик и мне придется "доверится" что его напишут, что я не очень хочу
Есть ли более красивое решение чем сейчас у меня?