Вот код для реализации шаблона декоратора в C ++. Он в основном принимает функцию и возвращает функтор. Этот код работает, но я хотел бы понять, почему нам нужна первая строка (то есть предварительное объявление). Если эта строка удалена, я получаю эту ошибку компиляции: ‘Decorator’ is not a class template
template <class> class Decorator;
template <class R, class... Args>
class Decorator<R(Args ...)>
{
std::function<R(Args ...)> f_;
public:
Decorator(std::function<R(Args ...)> f) : f_(f) {}
R operator()(Args ... args)
{
auto res = f_(args...);
std::cout << fmt::format("Calling the decorated function with res={}.\n", res);
return res;
}
};