Когда я пытаюсь передать функцию в качестве параметра типа шаблона шаблона в класс, произошла ошибка.Почему разработчики языкового ядра не включают эту возможность?Шаблоны классов Functor могут быть переданы, но шаблоны функций не могут.
Например, компилирование этого кода в "g ++ (Ubuntu 8.3.0-6ubuntu1) 8.3.0":
#include <iostream>
using namespace std;
template <template <typename> typename Functor>
class UseFunc
{
public:
void use()
{
Functor<int>(3);
Functor<char>('s');
}
};
template <typename T>
void func(T s)
{
cout << s << endl;
}
int main()
{
UseFunc<func> u {};
u.use();
}
сообщает:
kek.cpp: In function ‘int main()’:
kek.cpp:24:14: error: type/value mismatch at argument 1 in template parameter list for ‘template<template<class> class Functor> class UseFunc’
UseFunc<func> u {};
^
kek.cpp:24:14: note: expected a class template, got ‘func’
kek.cpp:25:4: error: request for member ‘use’ in ‘u’, which is of non-class type ‘int’
u.use();
^~~
Я ожидал, что это будет реализовано так же, как и передача параметров шаблона шаблона.В конце концов, это всего лишь запрос к компилятору, так что функции конкретных типов могут быть созданы и использованы обычным способом.
Воистину, не понимаю это ограничение, и было бы здорово, если бы кто-то мог сказать мне, в чем сложность реализации этого.