У вас нет свободного выбора, в зависимости от того, как вы хотите структурировать свой код или заголовочные файлы. Ответ продиктован вам требованиями вашей заявки.
Это зависит от того, может ли быть определено соединение во время компиляции или должно быть отложено до времени выполнения .
Если связь между компонентом и его зависимостями определяется постоянно во время компиляции, вы можете использовать шаблоны. Компилятор сможет выполнить встраивание.
Если, однако, необходимо определить связь во время выполнения (например, пользователь выбирает, какой другой компонент будет предоставлять зависимость, возможно, через файл конфигурации), тогда вы не можете использовать шаблоны для этого, и вы должны использовать полиморфный механизм времени выполнения , Если это так, ваш выбор включает виртуальные функции, указатели функций или std::function
.