我有以下场景:
class my_base { ... }
class my_derived : public my_base { ... };
template<typename X>
struct my_traits.
我想专门化my_traits从my_base派生的所有类,包括:ie
template<typname Y> // Y is derived form my_base.
stryct 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();
}
存在扩展问题,但我不相信它们比另一个问题中的替代方案更好或更差.