limit template type to only derive from certain base class.
// static_assert(std::is_base_of<Port, T>::value,
// "T must derive from Port");
// static_assert(std::is_base_of<Port, T>::value,
// "T must derive from Port");