定义模板类的实例

Define Instance of Template class

本文关键字:实例 定义      更新时间:2023-10-16

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

这是我的类

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

我建议这样使用模板专门化:

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

那么你可以说ErrorStart<unsigned int>::Error,总是得到相同的结果。您还可以在CDetectError的定义中使用ErrorStart结构来重用代码。

相关文章: