С boost::MP11 как применять параметры шаблона по одному?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 С boost::MP11 как применять параметры шаблона по одному?

Сообщение Anonymous »

Мне сложно заставить работать что-то вроде следующего:

Код: Выделить всё

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
Изначально я предполагаю, что это типичный вариант использования привязки. Однако mp_bind требует использования ::fn. Для этого необходимо добавить дополнительный код в определение FuncHas2, не так ли?
Я хочу, чтобы тип с несколькими параметрами шаблона мог принимать один параметр в время. Я хочу это сделать, потому что планирую сначала применить тип структуры к 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;
}
хорошо работает с моим тегом и элементами ListOfTypes по отдельности. Затем я планирую применить Func к ListOfTags, чтобы сформировать новый список ListOfPartialFunc, который будет включать список частично примененных объектов Func. В моем примере в идеале это должно выглядеть так: ListOfPartialFunc = { Func< tag1, _1 >, Func< tag2, _1 > };. Таким образом, все его элементы являются неполными типами.
Далее я могу применить ListOfPartialFunc к ListOfTypes, чтобы сгенерировать два разных новых списка с правильными тегами.
Проблема, с которой я здесь столкнулся, заключается в том, что шаблон Func требует двух параметров, поэтому его нельзя применить частично. Интересно, как здесь реализовать механизм Карри? Я имею в виду, пусть функция принимает один параметр и возвращает новую функцию, пока все требования к параметрам не будут выполнены? Я исследовал mp_bind. Поскольку на втором этапе требуется добавить ::fn (чтобы принять второй параметр), я не думаю, что это подходит для моего сценария, не так ли?

Подробнее здесь: https://stackoverflow.com/questions/782 ... -at-a-time
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»