2014-12-23 6 views
1

У меня есть вектор:Как правильно определить тип типа typename typename ...?

std::vector<std::weak_ptr<SignalFunction>> m_connections

А потом я хочу объявить вектор общих указателей к тому же типу, что этот вектор имеет место слабым указателем в общем виде:

std::vector<std::shared_ptr<typename typename decltype(m_connections)::value_type::element_type>> validConnections; 

Он отлично компилируется в Visual Studio 2013, но не в Xcode для iOS. Ошибка:

expected a qualified name after 'typename'

Это, однако, работает отлично:

typedef decltype(m_connections)::value_type ValueType; 
std::vector<std::shared_ptr<typename ValueType::element_type>> validConnections 

Как я могу избежать использования промежуточного typedef?

ответ

3

Вам нужен только один typename. Когда вы пишете typename T::some_type::other_type, компилятор знает, что some_type должен быть именем типа, потому что сразу следует ::. Только последний элемент (other_type) должен быть явно аннотирован, и для этого достаточно одного typename.

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