【发布时间】:2017-10-12 11:33:15
【问题描述】:
我得到了三个模板类 (Code in C++ Shell) 和一个别名模板 using AType = A<T1,T2> 在 A 中定义。我想在使用 A 对象的文件中使用别名。
所以在B而不是写:
C<A<T1,T2>> c_object;
我希望能够写出类似的东西:
C<typename AType> c_object;
使用A中声明的别名。
// A.h
template<typename T1, typename T2>
class A{
A();
};
template<typename T1, typename T2>
using AType = A<T1,T2>;
// C.h
template<typename H>
// H = A<T1,T2>
class C{
C();
};
// B.h
#include "A.h"
template<typename T1, typename T2>
class B{
B();
// const C<A<T1,T2>>& GetC() const;
const C<typename AType>& GetC() const;
private:
C<typename AType> c_object;
};
注意模板参数的关系。
如果B 只有一个模板参数G 像:
template<typename G>
class B{};
我可以这样做:
C<typename G::AType> c_object;
但由于B 实际上有两个,我无法弄清楚这将如何解决。还是整个问题通常以不同的方式解决?
【问题讨论】:
-
什么是 G::AType?我很困惑
-
你的意思是
C<AType<T1, T2>>? -
AType仍然是一个模板,所以无论如何你必须指定模板参数。 -
什么是 T1 和 T2。你的别名对你没有任何作用。它只是使 AType 等同于 A,因此没有任何改变。你想使用 AType = A
? -
@DummySenior:别名模板不会对模板参数进行某种隐式绑定。您要求的内容是不可能的,您必须为
A指定模板参数; T1 和 T2 不会被隐式传递。
标签: c++ c++11 templates using typename