如何正确编写"typename typename ..."类型化器?

How to write "typename typename ..." type scpecifier correctly?

本文关键字:typename 类型化 何正确      更新时间:2023-10-16

我有一个向量:

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中编译良好,但在iOS版Xcode中则不然。错误:

在"类型名称"之后需要一个限定名称

但是,这工作正常:

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

如何避免使用中间typedef

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