问题描述
我可以从派生类中提取类型参数吗?像这样:
template<typename T>
class A {
...
};
struct TheType {};
class B : public A<TheType> {
...
};
template<typename DerivedClass>
class C {
// If DerivedClass is B
// Can I extract the type parameter T of B:A<T> inside of C?
DerivedClass elem;
};
解决方法
您可以在type
中添加A
:
template<typename T>
class A {
protected:
using type = T;
...
};
然后您可以在typename DerivedClass::type
中使用C
。
不修改A
,您可以这样做:
// declaration only
template <typename T> T ATemplateTypeImpl(const A<T>&);
template <typename T>
using ATemplateType = decltype(ATemplateTypeImpl(std::declval<T>()));
static_assert(std::is_same<TheType,ATemplateType<B>>);