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 を書く必要はありません。ブーストまたは 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 に答える