5

我有以下情况:

class my_base { ... }

class my_derived : public my_base { ... };


template<typename X>
struct my_traits;

我想专门my_traits研究所有派生自my_base包括的类,例如:

template<typename Y> // Y is derived form my_base.
struct my_traits { ... };

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

如何以简单而简短的方式做到这一点?

4

1 回答 1

3

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

存在扩展问题,但我不认为它们比另一个问题中的替代方案更好或更差。

于 2010-06-03T18:18:54.723 回答