2011-07-02 45 views
5

模板专业化我有一个类用于类型提供性状类

template <typename T> struct Dispatch; 

其用于调用特定类型的功能。举例来说,假设我有一个像

template <> struct Dispatch <MyClass> { 
    static void Apply (void* a, MyClass& m) 
    { 
     ::memcpy (a, &m, sizeof (m)); 
    } 
}; 

调度员现在我有一堆的,我有一个类型的性状,ArrayTypes类。我想做类似的事情:

template <> struct Dispatch <enable_if<IsArrayType>> 
{ 
    template <typename ArrayType> 
    static void Apply (void* a, ArrayType& m) 
    { 
    ::memcpy (a, &m, ArrayTypeTraits<ArrayType>::GetSize (m)); 
    } 
}; 

这可能吗?

回答

4

只是觉得:

template <typename T, class Enable = void> struct Dispatch; 
template <typename T> 
struct Dispatch<T, typename boost::enable_if< typename IsArrayType<T>::type>::type> 
{ 
}; 

感谢科内尔。

0

特质背后的想法是,你可以提供一个默认的实现,类型可以选择专门化。这样,在使用特征的代码中没有特殊情况。你的方法(有特殊的情况下,有或没有特征定义的类)会打败类型特征的目的。