У меня есть шаблон класса Z
, что я хотел бы специализироваться при передаче типа, который представляет собой какие-либо конкретизации определенного шаблона N
:шаблон специализации по параметру TYPENAME быть любым экземпляром конкретного шаблона
struct L {
template <typename S> void foo(S &) {/*...*/}
};
template <class T>
struct M {
template <typename S> void foo(S &) {/*...*/}
};
template <class T>
struct N {
template <typename S> void foo(S &) {/*...*/}
};
// I'd like to specialize this for TY==N<anything>
template <typename TX, typename TY>
struct Z {
void bar(TX &tx) { /*...*/ ty->foo(tx); /*...*/ }
TY *ty;
};
Поскольку Z<int, L>
и Z<int, N<int>>
и Z<int, M<int>>
- все действующие прецеденты, я не могу ничего сделать по очереди поворота Z
в шаблон шаблона, и в Z<TX, TY>::bar(TX &)
возможно уменьшение сложности, когда TY
- это класс, построенный из N
. Есть ли способ достичь этого?
Спасибо, это именно то, что я искал. Я поиграл с подписью, но не смог вывести правильный. Я думаю, что на самом деле я получаю синтаксис параметров шаблонов в целом немного лучше. – Jeff
Рад помочь. +1 на ваш вопрос от меня. – jxh