C++模板专业化和xcode
C++ templates specializations and xcode
我从Xcode收到以下错误:
模板模板参数的模板参数必须是类模板或类型别名模板
然而,相同的代码在Visual Studio中也可以正常工作。
template< typename T_NODE, template< typename > class T_ALLOCATOR >
class qt_fixed_pool_general {};
template< template< typename, int > class T_ALLOCATOR, int T_COUNT >
struct static_to_dynamic
{ template< typename T_NODE > using t_allocator = T_ALLOCATOR< T_NODE,T_COUNT >; };
template< typename T_NODE, int T_COUNT >
struct safe_array {};
template< class T_NODE, int T_COUNT >
class qt_fixed_pool_static : public qt_fixed_pool_general<
T_NODE,
static_to_dynamic< safe_array, T_COUNT >::t_allocator >
{};
有什么想法吗?我使用的是Xcode 7.2
问题是,当解析(而不是实例化)模板时,编译器无法知道t_allocator
将是一个模板,而不是静态数据成员。你必须告诉它:
template< class T_NODE, int T_COUNT >
class qt_fixed_pool_static : public qt_fixed_pool_general<
T_NODE,
static_to_dynamic< safe_array, T_COUNT >::template t_allocator >
{}; //^^^^^^^^
【实例】
注意在::
和t_allocator
之间添加的template
关键字。
这在Visual Studio中起作用的原因是VS在模板解析方面不符合标准(而且从来没有):它没有正确地进行两阶段查找,而是将所有名称解析推迟到实例化时,这样它就不会遇到这样的错误。
相关文章:
- 如何使用默认参数等选择模板专业化
- 模板化建造师专业化
- 类模板的成员功能的定义在单独的TU中完全专业化
- ld:bind_at_load和-bitcode_bundle(Xcode设置ENABLE_bitcode=YES)不能
- 在没有Xcode的情况下在Mac捆绑包中嵌入框架
- 部分专业化和嵌套模板
- 模板专业化可以进入我的.cpp吗?
- 别名模板的专业化 C++11 中没有开销的最佳替代方案
- Xcode 语义问题引用或以前定义的代码
- 使用 Xcode 将双精度存储在数组C++中
- 部分专业化和对标准::void_t<>的需求
- Xcode 9.4.1 中的 Apple Mach-O 链接器 (id) 错误
- "专业化不参与超载"
- 特定好友功能专业化
- 是否可以混合使用SFINAE和模板专业化?
- 各种版本的 Mac OSX 向后兼容性如何?(Xcode C++
- MacOS 上的 Xcode 11 项目不在一个函数中使用 sin 和 cos:未定义的符号"___sincosf_stret"
- macOS 是内置在 clang 编译器中还是内置于 xcode ide 中?
- Xcode 9跌落以在C 中构建部分模板专业化
- C++模板专业化和xcode