У меня есть шаблонный метод, который принимает функцию, которой разрешено иметь любой возвращаемый тип, при условии, что он std::shared_ptr
для класса, наследуемого от TService
:
template<typename TService> struct BindSyntax {
typedef std::shared_ptr<TService>(*CreateServiceFunction)(int);
CreateServiceFunction myFunction;
template<
typename TResult,
std::shared_ptr<TResult>(*TMethod)(const ServiceProvider &)
>
void ToFactoryMethod() {
static_assert(
std::is_base_of<TService, TResult>::value, "Result must inherit service"
);
myFunction = [](int mooh) {
return std::static_pointer_cast<TService>(TMethod(mooh));
};
}
};
При вызове *Метод 1006 *, мне всегда нужно указывать тип возвращаемого значения функции, которую я ему предоставляю:
BindSyntax<Base> bind;
bind.ToFactoryMethod<Derived, exampleFactory>();
-
Можно ли заставить метод ToFactoryMethod<>()
каким-либо образом вывеститип возвращаемого значения переданной функции?
Я хотел бы написать просто
BindSyntax<Base> bind;
bind.ToFactoryMethod<exampleFactory>();
Фрагмент исполняемого кода здесь: https://ideone.com/FYtN6Q