2015-05-04 4 views
2

Я изучаю пример кода, который пытается научить реализации схем состояния. Я вижу определения типов в шаблоне, такие как typedef typename T::HostClass Hostпонимание typedefs внутри шаблонов

Для ясности, определение шаблона

template<typename T> 
struct Init { 
    typedef typename T::HostClass Host; 
    Init(Host& h) : 
      host_(h) { 
    } 
    ~Init() { 
     T::entry(host_); 
     T::init(host_); 
    } 
    Host& host_; 
}; 

Я пришел, чтобы знать цель typename рядом с typedef, и объясняет Highly-Typed-Languages таких как C++ (Folks, Am I не так ли? является ли это так?)

путаница находится в HostClass

В typedef typename T::HostClass Host;

  • Что такое HostClass?
  • Означает ли это, что любой тип T должен иметь элемент HostClass?
+0

Тут с этой страницы. 'http: // accu.org/index.php/journals/252' – nmxprime

ответ

3

HostClass должен быть вложенным классом или другим ЬурейеЙ (или типа псевдоним) в рамках T.

И если T не имеет его, код не компилируется.

+0

В коде и вокруг этого кода я не вижу typedef или псевдонима для HostClass. И это тоже не вложенный класс, – nmxprime

+0

См. Http://accu.org/index.php/journals/252 – nmxprime

+0

@nmxprime, вероятно, это просто опечатка и должна читать 'typedef T :: Host Host' – dwcanillas

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