如何正确编写"typename typename ..."类型化器?
How to write "typename typename ..." type scpecifier correctly?
我有一个向量:
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
就足够了。
相关文章:
- 为什么返回类型中需要typename?C++
- C++ assigment std::list:<typename>:itrator 在 main 中工作,但在方法中它不起作用
- 使用 'typename' 关键字将非类型视为依赖上下文中的类型
- 不能对类型化模板使用 STL 函数
- 在"template"和函数声明之间使用:template<typename trait> using tr = base_trait<trait> void fn(tr::t
- 在这种情况下,"typename..."意味着什么?
- 为什么不需要在 C++20 中的依赖类型之前指定"typename"?
- "Cannot convert Python object argument to type '<typename>'" - 使用 Cython 包装 C++ 类时出错
- "typename"不应该只在模板函数或模板类中使用吗?
- 为什么必须在C++中显式类型化 malloc 和 calloc?
- 删除非类型化shared_ptr
- C++ 中的"template <typename From, typename Tag> struct Alias;"是什么?
- 在C++中,我想通过使用来自变量(例如字符串)的typename信息,从模板中定义一个类对象
- 如何将一个使用参数包和typename的类作为函数(c++)的输入参数
- SFINAE的Typename关键字
- 为什么在以下情况下不需要为依赖类型使用typename
- 有什么技巧可以避免在模板类中使用"typename"关键字吗
- 如果函数是在类的主体中定义的,我是否需要在成员函数的返回类型中指定 typename?
- 将自动类型化 lambda 与模板化函数一起使用 - 在 g++ 5.4 中使用自动模板推导
- 如何正确编写"typename typename ..."类型化器?