@Drottarutarnum
Любопытный любитель

Как избавится от шаблона?

Есть базовый класс настройки 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 в каждом потомке, но они должны быть статик чтобы можно было писать одной строкой. И тут проблема, виртуальный метод не может быть статик и мне придется "доверится" что его напишут, что я не очень хочу

Есть ли более красивое решение чем сейчас у меня?
  • Вопрос задан
  • 68 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы