Update
To make the question more clear, please consider the following scenario:
The factory method for the actuator needs to know which type of Command object to use when constructing the implementation of the interface, such as:
#pragma once
namespace tareeq {
namespace control {
template <class T, class T1>
class Actuators {
public:
virtual ~Actuators() = default;
virtual bool Init(T Config) = 0;
virtual bool Start() = 0;
virtual bool Stop() = 0;
virtual bool Drive(T1 Command) = 0;
};
std::unique_ptr<Actuators> MakeAcutator();
} // namespace control
} // namespace tareeq
The agent will have to know the relevant Command class to use for a differential drive robot, which is angular velocity of the two wheels, where as for a bicyle model, the actuators can range from throttle/break, to an RC car with two motors; one on the rear wheels to move the car, and another to turn the front two wheels (usually motor connected to a spring that turns the front wheels)