比方说,我们有一个类层次结构,我们有一个通用Animal类,它有几类,从它直接继承(如Dog,Cat,Horse,等..).
在这个继承层次结构上使用模板时,使用SomeTemplateClass<Animal>然后将Dogs and Cats and Horses推入这个模板化对象是否合法?
例如,假设我们有一个模板化的Stack类,我们想要托管各种动物.我能说清楚吗?Stack<Animal> s; Dog d; s.push(d); Cat c; s.push(c);
我使用的是opencv的CvPoint2D32f结构,定义为
typedef struct CvPoint2D32f
{
float x; /* x-coordinate, usually zero-based */
float y; /* y-coordinate, usually zero-based */
}
CvPoint2D32f;
Run Code Online (Sandbox Code Playgroud)
我试图按如下方式分配这些对象的指针数组,但它无法正常工作.这是如何实现的?
CvPoint2D32f *cvpoints[8];
for (i = 0; i < 16; i++)
{
if (i % 2 == 0)
{
(*cvpoints)[i/2].x = float(points[i]); // points is an array of ints.
}
else
{
(*cvpoints)[i/2].y = float(points[i]);
}
}
Run Code Online (Sandbox Code Playgroud) 我试图声明一个抽象类,但只是模板化虚函数的行为让编译器抱怨。这通常是如何实现的?例如,在我的头文件中,我有:
virtual SpecialList<Point> *getPoints() const;
Run Code Online (Sandbox Code Playgroud)
编译器声明“ISO C++ 禁止声明没有类型的‘SpecialList’”。
编辑 Point 和 SpecialList 都包含在这个类的定义中。作为一个更详细的例子,
// SomeClass.h
#include "SpecialList.h"
#include "Point.h"
class SomeClass
{
public:
SomeClass();
virtual SpecialList<Point> *getPoints() const;
//snip
};
Run Code Online (Sandbox Code Playgroud)
还是没解决。。