定义Template类的实例

时间:2014-03-26 20:06:29

标签: c++ templates

是否可以在编译时定义模板类的实现,然后在运行时使用?

这是我的班级

template <typename T>
class CDetectError
{
public:
    CDetectError();
    CDetectError(T errorStart, T notAvailableStart)
    {
       m_Error = errorStart;
       m_NotAvailable = notAvailableStart;
    }

virtual ~CDetectError();

T Error() const {return m_Error;}
T NotAvailable() const {return m_NotAvailable;}

private:
    T m_Error;
    T m_NotAvailable;
};

我想要的是,如果我在编译时将该类的实例定义为

CDetectError<unsigned char>(0xFE, 0xFF);

然后,只要使用CDetectError<unsigned char>::Error(),它就会返回0xFE。

1 个答案:

答案 0 :(得分:0)

我建议使用模板专业化,如下所示:

template<class T>
struct ErrorStart;

template<>
struct ErrorStart<unsigned char> {
    static const unsigned char Error = 0xFE;
};

然后您可以说ErrorStart<unsigned int>::Error并始终获得相同的结果。 您还可以在ErrorStart的定义中使用该CDetectError结构来重用代码。