Да. Вот что такое статические методы. Просто позвоните. SomeType.yourStaticMethodHere ().
Я не знаю, если это вариант, но если вы можете позволить себе шаблон класса вместо метода, вы можете сделать «doFoo» виртуальным, и тогда он будет работать, как вы ожидаете.
#include <iostream>
template <typename ... Args>
struct Parent
{
virtual void doFoo(Args&&... args)
{
std::cout << "parent doFoo";
}
void foo(Args&&... args)
{
doFoo(args...);
}
};
template <typename ... Args>
struct Child : Parent <Args...>
{
void doFoo(Args&&... args) override
{
std::cout << "child doFoo";
}
};
int main()
{
Child<> c;
c.foo(); // This should invoke Child::doFoo()
}