C++ 定义模板类的实例
是否可以在编译时定义模板类的实现,然后在运行时使用 这是我的班级C++ 定义模板类的实例,c++,templates,C++,Templates,是否可以在编译时定义模板类的实现,然后在运行时使用 这是我的班级 template <typename T> class CDetectError { public: CDetectError(); CDetectError(T errorStart, T notAvailableStart) { m_Error = errorStart; m_NotAvailable = notAvailableStart; } vir
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;
};
模板
类cdetertError
{
公众:
cdetecertorr();
CDETETERROR(T errorStart,T notAvailableStart)
{
m_Error=errorStart;
m_NotAvailable=notAvailableStart;
}
虚拟的~cdetetacterror();
T Error()常量{return m_Error;}
T NotAvailable()常量{return m_NotAvailable;}
私人:
T m_误差;
T m_不可用;
};
然后我想要的是,如果我在编译时将该类的实例定义为
cdetertError(0xFE,0xFF)代码>
然后,无论何时使用cdetertError::Error()
,它都会返回0xFE。我建议使用模板专门化,如下所示:
template<class T>
struct ErrorStart;
template<>
struct ErrorStart<unsigned char> {
static const unsigned char Error = 0xFE;
};
模板
结构错误启动;
模板
结构错误开始{
静态常量无符号字符错误=0xFE;
};
然后您可以说ErrorStart::Error
,并始终得到相同的结果。
您还可以在cdetetetertorr
的定义中使用该ErrorStart
结构来重用代码。静态数据成员或静态局部变量如何?您以什么方式描述?如果您想在实例化类时设置一些值=创建该类的对象cdetertorr
,在运行时,您希望该类的所有对象为Error()
返回0xFE
,然后您可以引入一个静态数据成员,在实例化该类时设置它,并将Error()
设为一个静态成员函数。我仍然不确定您的目标。我如何“仅仅介绍”一个静态成员?在反复阅读你的问题之后,我想我不太明白你想做什么。是否要写入cdetertorx(0xFE,0xFF)然后x.Error()
应该是一个常量表达式(=编译时常量)?或者您是否要写入cdetertorx(0xFE,0xFF)代码>仅在程序中的任何位置执行一次,然后,对于类型为cdetacterror
(例如cdetacterror y;
)的所有对象,函数Error()
始终返回0xFE
(例如y.Error()==0xFE
)?