Просто перегрузите оператора:
// used for As
Array operator()(A& a)
{
// ...
}
// used for everything else
typename T::Element operator()(T& t)
{
// ...
}
Если вам просто нужны A
и B
, вторая также может относиться к B
:
// used for Bs
B::Element operator()(B& b)
{
// ...
}