C ++ проблема «адаптации» шаблона класса с тремя параметрами в шаблон класса с двумя параметрами - PullRequest
0 голосов
/ 28 февраля 2011

У меня есть класс, ожидающий шаблон с двумя параметрами, например:

template<template <class, class> class TwoParamsClass>
class Test
{};

также у меня есть такой класс:

template<int a, class A, class B>
class ThreeParamsClass
{};

Мне нужен адаптер, который устанавливает первый int-параметр «ThreeParamsClass», чтобы иметь возможность использовать их в классе Test.


Вот мое частичное решение (и проблема с ним).

template<int a>
struct Alias
{
    template<class A, class B>
    struct Type
    {
        typedef ThreeParmamsClass<a, A, B> Type2;
    };
};

и затем я называю Test следующим образом:

Test<Alias<1>::Type> 

(конечно, внутри Test мне нужно взять параметр и получить тип :: Type2)

Но проблема в том, что после этого мне нужно обернуть тестовый класс примерно так:

template<int n>
struct Wrap
{
    typedef Test<Alias<n>::Type> WrappedTest;
};

но я получаю эту ошибку:

ошибка: несоответствие типа / значения при аргумент 1 в списке параметров шаблона для шаблона класс T> тест класса '

Это странно, потому что это прекрасно работает:

template<int n>
struct Wrap
{
    typedef Test<Alias<1>::Type> WrappedTest;
};

Я надеюсь, что будет ясно, я подумал сделать два вопроса по этому вопросу, но я думаю, что лучше задать второй в контексте первого.

Спасибо

1 Ответ

2 голосов
/ 28 февраля 2011

Не совсем понимаю ваши рассуждения, но попробуйте это:

template<int n>
struct Wrap
{
    typedef Test<Alias<n>::template Type> WrappedTest;
};
...