У меня есть класс Foo
, который имеет два параметра шаблона, A
и B
:
template<typename A, typename B>
struct Foo {};
Также у меня есть класс Base
, который имеет один параметр шаблона шаблона:
template<template<typename B> typename Foo>
struct Base {};
Я хочу написать класс Derived
, предполагая следующее:
Derived
имеет один параметр шаблона (A
)
Derived
расширяет класс Base
Derived
передается в качестве параметра шаблона в класс Base
, класс Foo
, но с одним параметром "curry" (A
)
Как я могу это сделать?
Вот мое ( не работающее ) решение:
template<template<typename B> typename Foo>
struct Base {};
template<typename A, typename B>
struct Foo {};
template<template<typename A, typename B> typename Foo, typename A>
struct BindFirst {
template<typename B>
using Result = Foo<A, B>;
};
template<typename A>
struct Derived : Base<
// error is here
typename BindFirst<Foo, A>::Result
> {};
Что дает мне ошибку:
Аргумент шаблона для параметра шаблона должен быть шаблоном класса или псевдонимом типа