Как определить, может ли метод базового типа, хранящийся в shared_ptr, быть вызван с одним параметром или без него во время компиляции
Использование С++ 17. У меня есть следующее:
template <typename T>
using ptr_t = std::shared_ptr<const T>;
class some_type;
class A { some_type foo() const; }
class B { some_type foo() const; }
class C { some_type foo(int) const; }
std::variant<ptr_t<A>, ptr_t<B>, ptr_t<C>>;
Вариант содержит shared_ptr(s) для разных типов. Ожидается, что все они будут иметь функцию foo() , которая может быть недействительной или принимать параметр. Затем у меня будет посетитель, который правильно отправит foo, что-то вроде этого (концептуально):
struct visitor
{
template <typename T>
ptr_t<some_type> operator()(const T& config) const
{
if constexpr (// determine if foo() of the underlying type of a shared_ptr can be called with int param)
return config->foo(15);
else
return config->foo();
}
есть ли способ сказать это? Я пробовал разные способы, но не могу найти что-то, что компилируется. Параметр шаблона T равен ptr_t<A|B|C>.