По запросу этот вопрос Я написал шаблон, который позволяет преобразовать шаблон в шаблон с различными параметрами:
template< template <int A,char B,bool> typename T>
struct Add_true {
template <int A,char B> using type = T<A,B,true>;
};
Справочная информация: цель состояла в том, чтобы передать template<int A, char B, bool C> class A2{};
в качестве параметра шаблона шаблона для template<template<int A, char B> typename T> class A1 {};
. Я узнал о шаблонах с C ++ 11. Когда я привык писать типы / функции, которые берут типы и возвращаемые типы, вместо написания функций, которые принимают значения и возвращают значения, это был совершенно сдвиг в мышлении о коде. Мне никогда не приходило в голову, что также удивительно просто писать шаблоны, которые дают шаблону «возвращать» другой шаблон. Дело в том, что я не имею ни малейшего понятия, как написать выше или аналогичные шаблоны без псевдонимов, которые доступны только с C ++ 11. То, что было возможно всегда afaik, следующее. Учитывая
template <int A,char B, bool C> struct Foo{};
, я могу "привязать" параметр bool к Foo
через:
template <int A,char B>
struct Add_true_to_Foo {
typedef Foo<A,B> type;
};
Но теперь Add_true_to_Foo<A,B>::type
не является шаблоном, и я не имею ни малейшего понятия, без чего C ++ 11 как написать Add_true
, который будет работать не только для Foo
, но и для
template <int A,char B, bool C> struct Bar{};
Может быть, я упускаю что-то очевидное. Мой вопрос:
Можно ли написать эквивалент выше Add_true
до C ++ 11?