我有以下场景:
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/