我有一个矢量:
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 for iOS中却没有。错误:
在'typename'
之后需要一个合格的名字
然而,这可以正常工作:
typedef decltype(m_connections)::value_type ValueType;
std::vector<std::shared_ptr<typename ValueType::element_type>> validConnections
如何避免使用中间typedef
?
答案 0 :(得分:3)
您只需要一个typename
。当您编写typename T::some_type::other_type
时,编译器知道some_type
必须是类型名称,因为它后面紧跟::
。只有最后一个元素(other_type
)必须明确注释,为此,单个typename
就足够了。