У меня есть пара объявлений шаблонов классов, таких как:
template<typename T, template<typename W> class X>
struct B {
bool operator()(const T& left, const T& right)
{ return X<W>()(left, right); }
};
template<template<typename T> class X, typename Q>
struct A {
bool operator()(const int a, const int b)
{
return B<Q, X>()(a, b);
}
};
Я могу создать A<std::greater, int>
, A<std::less, int>
, и все работает, как я хочу.
Возможно лисоздать класс, который будет содержать шаблон, переданный как std::greater
, и, тем не менее, его можно будет передавать как std::greater
в приведенном выше примере?
Примерно так:
template <template <typename T> class Class>
class Wrapper
{
operator()(const int, const int) { return Class<?what's here?> (value, value); }
};
Я хотел бы передать свой Wrapper
неизменному A
A<Wrapper<std::less>, long>
Другими словами, я хочу имитировать шаблон, переданный моей обертке, для совместимости с реальной версией класса A
.