C++ 为派生类提供模板专门化的最简单方法

C++ 为派生类提供模板专门化的最简单方法,c++,template-specialization,inheritance,C++,Template Specialization,Inheritance,我有以下情况: class my_base { ... } class my_derived : public my_base { ... }; template<typename X> struct my_traits; 我可以在my_base中添加标记和成员,使其更简单。我看过一些把戏,但还是觉得迷路 如何以简单、快捷的方式完成此任务?好吧,您不需要编写自己的isbaseof。您可以使用boost或c++0x #include <boost/utility/enab

我有以下情况:

class my_base { ... }

class my_derived : public my_base { ... };


template<typename X>
struct my_traits;
我可以在
my_base
中添加标记和成员,使其更简单。我看过一些把戏,但还是觉得迷路


如何以简单、快捷的方式完成此任务?

好吧,您不需要编写自己的isbaseof。您可以使用boost或c++0x

#include <boost/utility/enable_if.hpp>

struct base {};
struct derived : base {};

template < typename T, typename Enable = void >
struct traits;

template < typename T >
struct traits< T, typename boost::enable_if<std::is_base_of<base, T>>::type >
{
  enum { value = 5 };
};

#include <iostream>
int main()
{
  std::cout << traits<derived>::value << std::endl;

  std::cin.get();
}
#包括
结构基{};
派生结构:基{};
模板
结构特征;
模板
结构特征
{
枚举{值=5};
};
#包括
int main()
{

std::cout replication of,如果这足够好的话。@Beta,难道没有更简单的方法吗?因为我可以任意更改我的_基,所以可能不需要IsBaseOf就可以完成?在c++11中更简单:谢谢…看起来没有更简单的方法了,但至少只需要一行(和几个标题)就可以完成
#include <boost/utility/enable_if.hpp>

struct base {};
struct derived : base {};

template < typename T, typename Enable = void >
struct traits;

template < typename T >
struct traits< T, typename boost::enable_if<std::is_base_of<base, T>>::type >
{
  enum { value = 5 };
};

#include <iostream>
int main()
{
  std::cout << traits<derived>::value << std::endl;

  std::cin.get();
}