Что не так с этим шаблоном частичной специализации кода?

0

Я использую следующий код:

template<typename t>
struct foo
{
    foo(t var)
    {
        std::cout << "Regular Template";
    }
};



template<typename t>
struct foo<t*>
{
    foo(t var)
    {
        std::cout << "partially specialized Template " << t;
    }
};


int main()
{
    int* a = new int(12);

    foo<int*> f(a); //Since its a ptr type it should call specialized template

}

Однако я получаю ошибку

Error   1   error C2664: 'foo<t>::foo(int)' : cannot convert parameter 1 from 'int *' to 'int'  
  • 0
    Вы сказали, что компилятор t является int , но вы передаете int * где он ожидает t .
Теги:
templates

1 ответ

3
Лучший ответ

Конструктор обоих шаблонов принимает значение t по значению, которое в вашем примере является int, а не int*. Чтобы использовать этот компилятор

template<typename t>
struct foo<t*>
{
    foo(t* var)
    {
        std::cout << "partially specialized Template " << var;
    }
};

если это соответствует вашей логике, иначе передайте int конструктору. (Жить)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню