Код: Выделить всё
template< typename T1, typename T2>
struct Func{
using type = boost::mp11::mp_same< T1, T2 >;
};
using FuncHas1 = Func< int >;
using FuncHas2 = FuncHas1< float >;
// Finally FuncHas2 = Func< int, float >,
// which yields FuncHas2::type == mp_false
Я хочу, чтобы тип с несколькими параметрами шаблона мог принимать один параметр в время. Я хочу это сделать, потому что планирую сначала применить тип структуры к list1 (который имеет набор параметров для T1), а затем снова применить его к list2, который имеет список вторых параметров для Т2. Как это сделать?
Мое обновление для уточнения вопроса
Проблема, которую я хочу решить, заключается в следующем. У меня есть два списка: один — ListOfTags, другой — ListOfTypes. Каждый элемент в ListOfTypes содержит тег typeTag. ListOfTags включает список тегов. Размер двух списков обычно различен.
Моя цель — извлечь элементы из ListOfTypes для каждого ListOfTags. Например, ListOfTags = {tag1, tag2}. Затем я хочу извлечь все элементы в ListOfTypes с помощью tag1, чтобы сформировать новый список, а также еще один для tag2.
Чтобы выполните сравнение, я придумываю тип функции следующим образом:
Код: Выделить всё
template< typename T1, typename T2 >
struct Func
{
// compare T1 and T2 here and return result as a mp_true/false;
}
Код: Выделить всё
FuncДалее я могу применить ListOfPartialFunc к ListOfTypes, чтобы сгенерировать два разных новых списка с правильными тегами.
Проблема, с которой я здесь столкнулся, заключается в том, что шаблон Func требует двух параметров, поэтому его нельзя применить частично. Интересно, как здесь реализовать механизм Карри? Я имею в виду, пусть функция принимает один параметр и возвращает новую функцию, пока все требования к параметрам не будут выполнены? Я исследовал mp_bind. Поскольку на втором этапе требуется добавить ::fn (чтобы принять второй параметр), я не думаю, что это подходит для моего сценария, не так ли?
Подробнее здесь: https://stackoverflow.com/questions/782 ... -at-a-time
Мобильная версия