C++ - 从派生 class 中提取模板参数
C++ - Extract template parameter from derived class
我可以从派生的 class 中提取类型参数吗?像这样:
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;
};
您可以在A
中添加一个type
:
template<typename T>
class A {
protected:
using type = T;
...
};
然后你可以在C
中使用typename DerivedClass::type
。
在不修改 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>>);
我可以从派生的 class 中提取类型参数吗?像这样:
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;
};
您可以在A
中添加一个type
:
template<typename T>
class A {
protected:
using type = T;
...
};
然后你可以在C
中使用typename DerivedClass::type
。
在不修改 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>>);