模板结构专业化使用TypName ::
Template structure specialization using typename ::
我想使用定义在另一个结构A。
中定义的类型bust b。一个人可以在帖子中看到MWE。
首先,我感到惊讶的是B的两个专业都可以一起存在。我添加了第二个以显示问题。如果删除,代码请参见B的适当专业化。我宁愿只保留第一个专业化。
所以,我的问题是:
- 为什么B的两个专业可以一起存在?
- 为什么第一个不适用于Main的实例化?
defutions.h:
template <class T>
class X {};
template <class T>
class Xitem {};
template <class T>
struct A;
template <class T>
struct A< X<T> > {
typedef Xitem<T> Titem;
};
template <class T>
struct B;
template <class T>//I need this one only
struct B< typename A< X<T> >::Titem > {
static void foo() {
std::cout << "foo 1" << std::endl;
}
};
template <class T>
struct B< Xitem<T> > {
static void foo() {
std::cout << "foo 2" << std::endl;
}
};
main.cpp:
#include "definitions.h"
int main(int argc, char *argv[]) {
B< A< X<int> >::Titem >::foo();
}
输出:" foo 2"使用Xcode 7
igor tandetnik在评论中给出的答案:
想象一下您使用的。没有这样的)。否则进行定理的练习以证明,通过当前可见的定义和专业化,不可能导致A&lt;x> :: titem是一个。编译器不会达到这样的长度;相反,它声明t为不可及的上下文,从不使用此专业化。
相关文章:
- 如何使用默认参数等选择模板专业化
- 模板化建造师专业化
- 类模板的成员功能的定义在单独的TU中完全专业化
- 部分专业化和嵌套模板
- 模板专业化可以进入我的.cpp吗?
- 别名模板的专业化 C++11 中没有开销的最佳替代方案
- 部分专业化和对标准::void_t<>的需求
- "专业化不参与超载"
- 特定好友功能专业化
- 是否可以混合使用SFINAE和模板专业化?
- 为什么在班级专业化上会出现错误?
- enable_if如何帮助选择类模板的专业化?
- std::initializer_list可以专业化吗?
- 派生类中纯虚拟基方法的专业化
- "expected a '>'"类模板专业化?
- Clang不会编译GCC会编译的模板专业化
- 我可以用clang AST从模板专业化中获得默认的模板参数吗
- 函数模板部分专业化-有什么解决方法吗
- 类模板的编译错误,但其专业化除外
- 模板结构专业化使用TypName ::