В C++ существует 2 типа шаблонов (насколько мне известно): классы шаблонов и функции шаблона. Почему шаблон шаблона невозможен? (будь то класс, функция или другой шаблон). Было ли это когда-либо рассмотрено в стандартах? Разрывает ли он синтаксис/дух Си ++? Я знаю, это может показаться сумасшедшим, и легко обойти.Почему вы не можете создать шаблон шаблона?
Что можно с C++:
template<bool b>
class TemplateDependingOnBool
{
public:
template<typename T>
class TheTemplateWeWant{};
}
Что было бы здорово:
template<bool b>
template<typename T>
class TheTemplateWeWant{};
и назвать его в стиле на основе политик (что, где это действительно интересно):
template<typename T, template<typename> class ThePolicy = TheTemplateWeWant<true> >
class Foo {};
Способ, который теперь можно использовать, - использовать:
template<typename T,
template<typename> class ThePolicy = TemplateDependingOnBool<true>::TheTemplateWeWant >
class Foo{};
который не очень элегантный.
EDIT:
Я знаю, что могу шаблон на 2 параметров. Цель состоит в том, чтобы использовать базовый шаблонный шаблон (шаблонный шаблон) как нечто само собой, будь то в шаблоне или в шаблоне (как показано в моем примере). Основанный на политике дизайн является ссылкой на Modern C++ Design Andrei Alexandrescu, что является основной причиной, почему функция, которую я прошу, может быть полезна (поскольку шаблоны используются в качестве параметров шаблона).
Вы должны написать 'шаблон класса TheTemplateWeWant {};' –
nwp
При упоминании «на основе политик в стиле» это заставляет меня думать о [понятий предложение] (https://isocpp.org/blog/2013/02/concepts-lite-constraining-templates-with-predicates-andrew-sutton-bjarne-s). –
Я не понимаю, что вы здесь спрашиваете. – Barry