假设有A类和MyType的访问嵌套的模板类型
template<typename DataType>
class MyType {
...
}
template<typename MyType>
class A {
...
}
当我我怎么可以访问内部的模板int类型创建一个与A<MyType<int>>
的实例?
假设有A类和MyType的访问嵌套的模板类型
template<typename DataType>
class MyType {
...
}
template<typename MyType>
class A {
...
}
当我我怎么可以访问内部的模板int类型创建一个与A<MyType<int>>
的实例?
另一种方法是这样的:
template <typename DataType>
class MyType { ... };
template<typename X> // template parameter name changed for clarity
class A; // intentionally left undefined
template<typename Y>
class A<MyType<Y>> { ...Y... }; // a specialisation
... A<MyType<int>> ... // Y in the definition of A is int
这种方法只能用MyType
的实例实例化A
。
如果有一个需要实例化一个与任何模板类型,一个使用有点不同的分工:
template<template<typename...> X, typename Y>
class A<X<Y>> { ...X<Y>... }; // a specialisation
... A<MyType<int>> ... // X in the definition of A is MyType, Y is int
... A<OtherType<double>> ... // X is OtherType, Y is double
这种方法,人们可以通过不具有非类型模板参数的任何模板类型。
如果存在另一种类型而不是MyType并且我想访问Y.我的意图是访问MyType或任何其他类型的第一个模板类型 – Gustavo
@Gustavo为此添加了一种方法。 –
公开一个type alias给用户:
template<typename DataType>
class MyType {
public:
using InnerDataType = DataType;
};
template<typename MyType>
class A {
public:
using InnerType = MyType;
};
用法:
using MyA = A<MyType<int>>;
static_assert(std::is_same<
typename MyA::InnerType::InnerDataType,
int>{});
值得一提的是,这是“像标准库一样”的好例子 - 容器,迭代器和库中的每个模板都很明显。 –
您可以在MyType中添加'typdef',并在'A'中使用它。 – songyuanyao
你有错别字吗?什么是“A with A”和“A中的int类型”? – ThomasMcLeod
对不起。修正了它 – Gustavo