C++和VC下都存在问题,就是自定义的模版类是否可以继承,相关例子请看下面代码。
template <class Buffer>
class generic_format
{
private:
Buffer& buffer;
public:
generic_format(Buffer& buf):buffer(buf) {}
}template <class Buffer>
class raw_format: public generic_format<Buffer>
{
}
如果raw_format后面的继承注释掉,程序就不报错,如果添加上该段代码,系统就报该句声明不正确.请问,STL是否有继承,如果有,应该怎么写?上段代码中哪个地方存在了错误?
template <class Buffer>
class generic_format
{
private:
Buffer& buffer;
public:
generic_format(Buffer& buf):buffer(buf) {}
}template <class Buffer>
class raw_format: public generic_format<Buffer>
{
}
如果raw_format后面的继承注释掉,程序就不报错,如果添加上该段代码,系统就报该句声明不正确.请问,STL是否有继承,如果有,应该怎么写?上段代码中哪个地方存在了错误?
class generic_format
{
private:
Buffer& buffer;
public:
generic_format(Buffer& buf):buffer(buf) {}
};
template <class Buffer>
class raw_format: public generic_format<Buffer>
{
};
还有,我在程序中就写这几句代码就会报错,如果不是头文件的问题,那就一定是这几句代码的问题
class generic_format
{
private:
Buffer& buffer;
public:
generic_format(Buffer& buf):buffer(buf) {}
}template <class Buffer>
class raw_format: public generic_format<Buffer>
{
}
---------------------------------------------------
上面的是语法问题,你class的定义没有用分号(;)结束
当然就定义失败了
template<class Buffer>
class generic_format
{
protected:
Buffer buffer;
public:
generic_format(Buffer&buf):buffer(buf) {};
virtual ~generic_format(){};
};template<class Buffer>
class raw_format: public generic_format<Buffer>
{
public:
raw_format(Buffer&buf) : generic_format<Buffer>(buf){};
~raw_format(){};
};类的数据成员定义为什么要用引用呢?很奇怪!尽量走常规,尤其是试用模板的时候。
以上面的例子:
template <class Buffer>
class generic_format
{
private:
Buffer& buffer;
protected:
void* require(int n) {return buffer.require(n);}
void unrequire(int n) {buffer.unrequire(n);}
public:
generic_format(Buffer& buf):buffer(buf) {}
}template <class Buffer>
class raw_format: public generic_format<Buffer>
{
public:
typedef Buffer buffer; raw_format(Buffer& buf):generic_format<Buffer>(buf) {}
template <class T>
inline void input_simple(T& data)
{data=*((T*)require(sizeof(T)));}
}
这时require函数就会报错了,在其他继承的函数里使用也是报错,不知道原因是什么
注:在linux下编译此问题很严重