Представьте, что у нас есть шаблон класса.Примерно так:
template<typename T>
class MyTemplateClass {
private:
T _v1, _v2;
public:
MyTemplateClass(T v1, T v2)
{
_v1 = v1;
_v2 = v2;
}
bool Act()
{
return _v1 > _v2;
}
};
//usage
MyTemplateClass<int> test(1, 2);
std::cout << test.Act() << std::endl;
Теперь мы хотим передать объект-конструктор / указатель функции / лямбду в его конструктор, чтобы мы могли его использовать.
Я пробовал что-то подобное, нополучил ошибку времени выполнения
template<typename T, typename F>
class MyTemplateClass {
private:
T _v1, _v2;
const F& _func;
public:
MyTemplateClass(T v1, T v2, F functor)
:_func(functor)
{
_v1 = v1;
_v2 = v2;
}
bool Act()
{
return _func(_v1, _v2);
}
};
bool isGreater(int a, int b)
{
return a > b;
}
//later
MyTemplateClass<int, std::function<bool(int, int)>> test(1, 2, isGreater);
std::cout << test.Act() << std::endl;
так как же мне добиться этой функциональности?Есть ли способ заставить это работать без использования std :: function и без передачи typename для моего объекта функтора?Я хотел бы использовать это таким образом
MyTemplateClass<int> test(1, 2, isGreater);