2014-09-10 7 views
2

Я новичок в мире C++, и я не понимаю, что происходит при использовании этой структуры:Использование ЬурейеГо ClassName < > после класса

template <typename T> 
    class NameClass{ 
......... 

}; 
typedef NameClass<CryptoPP::AES> CryptAES; 
//!Typedef for the AES Encryption\Decryption 
typedef NameClass<CryptoPP::Blowfish> CryptBlowFish; 
//!Typedef for BlowFish Encryption\Decryption 

Есть ли объяснение?

+2

Это означает, что 'NameClass' является шаблоном, параметризованным типом шифрования, который он использует. 'CryptAES' и' CryptBlowFish' являются специализациями для определенных типов шифрования. Ваша вступительная книга должна подробно описывать шаблоны; но это слишком большой предмет для объяснения здесь. –

+0

Я хочу, чтобы вы поняли, что вы имели в виду под «шаблоном», можете ли вы дать мне учебник. это именно структура у меня есть: шаблон класс Crypt { ......... ....... }; typedef Crypt CryptAES; \t //! Typedef для AES Encryption \ Decryption \t typedef Crypt CryptBlowFish; \t //! Typedef для BlowFish Encryption \ Decryption – xtensa1408

+1

@Mike - Stack Overflow приветствует программистов-энтузиастов. Также см. [Можем ли мы быть немного лучше для новых пользователей?] (Http://meta.stackexchange.com/questions/9953/could-we-please-be-a-bit-nicer-to-new-users) , – jww

ответ

3

Существует также весьма вероятно,

template<classT> или template <typename T> выше class NameClass, и это означает, что NameClass шаблон, параметрирован типом шифрования он использует, по T.

Подробнее о шаблонах here.

typedef - ключевое слово в C++. Цель состоит в том, чтобы сокращать сложные имена. В вашем примере

NameClass<CryptoPP::Blowfish> 

может быть использована сокращенная запись из CryptBlowFish

, потому что он был typedefed, как

typedef NameClass<CryptoPP::Blowfish> CryptBlowFish; 

раньше. Так

CryptBlowFish cbf; 

такое же как

NameClass<CryptoPP::Blowfish> cbf; 

http://en.wikipedia.org/wiki/Typedef

+0

спасибо, это то, что я знаю от C. Но теперь в чем разница между использованием CryptAES или CryptBlowFish? – xtensa1408

+0

вместо написания такой же логики в NameClass для типа CryptoPP :: AES и для типа CryptoPP :: Blowfish вы пишете один: шаблон с типом T, затем вы создаете шаблон с разным (выше) типами – 4pie0

+0

Это понятно. однако в мой код нет ничего, что позволит ClassName различать CryptAES и CryptBlowFish !!! – xtensa1408

2

Это означает, что NameClass является templatised класс, то есть тот, который является полиморфным в ее поведении зависит от аргумента шаблона.

typedef NameClass<CryptoPP::AES> CryptAES; 

В английском языке выше говорит: «Теперь в этой области, CryptAES другое название NameClass, когда экземпляр с CryptoPP :: AES в качестве аргумента шаблона».

+0

Pedantic: 'NameClass' - это шаблон * класса *. –

+0

и как мой класс может оглушить между шаблоном: CryptAES и CryptBlowFish !!! – xtensa1408

+1

@ SADOK.net Это не шаблоны, они такие классы, как любые другие. Вы различаете их точно так же, как если бы они были написаны вручную. – molbdnilo

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