Smplest方法为派生类提供模板专门化 [英] Smplest way to provide template specialization for derived classes

查看:126
本文介绍了Smplest方法为派生类提供模板专门化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下场景:

class my_base { ... }

class my_derived : public my_base { ... };


template<typename X>
struct my_traits.

我想要专门化 my_traits my_base 包括:

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

我没有问题,添加任何标签,成员 my_base 使它更简单。

I have no problems to add any tags, members to my_base to make it simpler. I've seen some trick but I still feel lost.

如何做到这一点是简单和简单的方法?

How can this be done is simple and short way?

推荐答案

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

Well, you don't need to write your own isbaseof. You can use boost's or c++0x's.

#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();
}

有扩展问题,但我不相信他们更好,比另一个问题的替代方案更糟。

There are scaling issues but I don't believe they're any better or worse than the alternative in the other question.

这篇关于Smplest方法为派生类提供模板专门化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆