我想创建一个名为
谢谢。
is_foo
的函数,该函数可与enable_if
结合使用,以确定类型是否派生自某个CRTP基类。下面的代码是我尝试实现is_foo
函数的代码,但它实际上并不起作用。请问有人可以告诉我需要更改什么才能修复它吗?谢谢。
#include <iostream>
#include <type_traits>
#include <functional>
using namespace std;
template <class Underlying, class Extra>
struct Foo
{
int foo() const { return static_cast<const Underlying*>(this)->foo(); }
};
template<class T>
struct Bar : Foo<Bar<T>, T>
{
int foo() const { return 42; }
};
template<class T>
struct is_foo { static const bool value = false; };
template<class Underlying, class Extra>
struct is_foo<Foo<Underlying, Extra> > { static const bool value = true; };
template<class T>
void test(const T &t)
{
cout << boolalpha << is_foo<T>::value << endl;
}
int main()
{
Bar<int> b;
test(b);
}