Реализация шаблона базового класса в зависимости от типа аргумента конструктора производного класса - PullRequest
2 голосов
/ 06 января 2011

В дальнейшем, не должен ли конструктор базового класса генерироваться компилятором на основе типа аргумента конструктора производного класса?

template <class T>
class foo
{
int a;
public:
    foo(T a){}
    // When I convert the constructor to a function template, it works fine.
    // template <typename T> foo(T a){}
};

class bar : public foo<class T>
{
public:
    bar(int a):foo(a){}
};

int main(void)
{
    bar obj(10);
    system("pause");
    return 0;
}

ошибка C2664: «foo :: foo (T)»: невозможно преобразовать параметр 1 из «int» в «T»

Я понимаю ошибку, но почему?

1 Ответ

5 голосов
/ 06 января 2011

Синтаксис в class bar : public foo<class T> неверен.

  • Либо bar зависит от параметра шаблона T, а bar должен быть шаблоном:

    template<class T>
    class bar : public foo<T>
    {
    public:
        bar(int a):foo(a){}
    };
    
    
    int main()
    {
        bar<int> obj(10);
    }
    
  • Или вы хотите, чтобы bar наследовал от конкретного экземпляра foo, например:

    class bar : public foo<int>
    {
    public:
        bar(int a):foo(a){}
    };
    
    
    int main()
    {
        bar obj(10);
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...