为派生类提供模板特化的最简单方法

时间:2010-06-03 17:35:03

标签: c++ template-specialization inheritance

我有以下情况:

class my_base { ... }

class my_derived : public my_base { ... };


template<typename X>
struct my_traits.

我想专门化my_traitsmy_base派生的所有类,包括:ie。

template<typname Y> // Y is derived form my_base.
stryct my_traits { ... };

我没有任何问题可以添加任何标签,成员my_base以使其更简单。我看到了一些技巧,但我仍然感到迷失。

如何做到这一点简单而简短?

1 个答案:

答案 0 :(得分:2)

好吧,你不需要编写自己的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();
}

存在扩展问题,但我不相信它们比其他问题中的替代方案更好或更差。