2016-11-28 4 views
1

Какой тип T, если я пишу что-то вроде этого:C++ тип шаблона и тип шаблона

template<typename T> 
class AClass{ 
    private: 
    T member; 
    public: 
    AClass(const T& value = T()) : member(value) {} 
}; 

int main(){ 
    const char* n = "Hello"; 
    AClass<char*> a(n); 
    return 0; 
} 

ли T относится к char или указатель над char?

Спасибо за ваши ответы

+1

Что такое «Aclass», и как, если это вообще связано с «AClass»? –

+1

Он не будет компилироваться. – Eugene

+0

@ Юджин, извините, теперь он компилируется. – Papipone

ответ

1

Факты:

  • T находится в вашем примере char *
  • Пример won't compile

Подумайте о конструкторе:

AClass(const T& value = T()) 

То, что вы хотите, является указателем на const char , то есть const char *.
В вашем конструкторе вы говорите, что T is const, таким образом, вы просите указатель const на char, то есть char * const.
Это на самом деле два разных зверя, и компилятор жалуется на отсутствие const (скажем) в нужном месте в вашем конструкторе. Это связано с тем, что конверсия с const char * в char * не допускается.

+0

Странно, он хорошо компилируется под MSVC2015. – Papipone

+1

Я тестировал под Linux с g ++ 4.9.2 и да, он не будет компилироваться по той причине, о которой вы говорили. – Papipone

0

Если предположить, вы имели в виду, чтобы написать

AClass<char*> a('n');

T является char* (адрес), но 'n' бы решить просто char. Я не думаю, что это скомпилировалось.

+0

Исправлено – Papipone

+2

Это должен быть комментарий. – 0x499602D2

Смежные вопросы