如何正确编写“typename typename ...”类型scpecifier?

时间:2014-12-23 09:54:38

标签: c++ templates

我有一个矢量:

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

1 个答案:

答案 0 :(得分:3)

您只需要一个typename。当您编写typename T::some_type::other_type时,编译器知道some_type必须是类型名称,因为它后面紧跟::。只有最后一个元素(other_type)必须明确注释,为此,单个typename就足够了。