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

标签 c++ template-specialization inheritance

我有以下场景:

class my_base { ... }

class my_derived : public my_base { ... };


template<typename X>
struct my_traits;

我想为从 my_base 派生的所有类专门化 my_traits,包括,例如:

template<typename Y> // Y is derived form my_base.
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();
}

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

关于c++ - 为派生类提供模板特化的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2968380/

相关文章:

objective-c - 使用继承时如何在 objective-c 中获取调用者的类名?

c++ - 是否有针对搜索优化的类似集合的数据结构,提前知道会有很高的匹配率?

c++ - WTL,无法创建工具栏

C++ - 将 rapidjson::Document 作为参数传递给函数

c++ - 类模板方法的特化,类型名称是类模板 - 错误 : type/value mismatch at argument

c++ - 类模板 : why can't I specialize a single method for void type?

c++ - CPP 读取文件但 EXE 不读取

c++ - 是否允许在函数模板的显式特化中推导多个模板参数?

c++ - 围绕 shared_ptr 构建对象系统

php - Cake PHP 中的 Controller 继承?