已知一个类型Base,给定任意一个类型T,如果T是base的子类,则返回base类型,否则返回T类型。
#include <iostream>
#include <type_traits>
class Base {};
class Derived : public Base {};
template<typename T, bool b = std::is_base_of<Base, T>::value>
struct Test {
};
template<typename T>
struct Test<T, false> {
typedef T type;
};
template<typename T>
struct Test<T, true> {
typedef Base type;
};
int main() {
Test<Derived>::type test;
return 0;
}