Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 定义模板类的实例_C++_Templates - Fatal编程技术网

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
)?