我尝试创建一个 SSCE,因为这通常也有助于及早发现问题。但是,我似乎找不到解决方案,所以我想知道是否可以定义一个未指定模板类指针的参数。
我定义了一个接口和一个解析器类,它应该处理 xerces 的实现细节(如转码和所有这些开销)。接口类将被设计为从 (SAX) 解析器创建对象,但不必处理 xerces 库。
在 Java 中,我知道我可以使用一个未指定的泛型类型参数,如下所示:
class Parser
{
public Parser(IGenericInterface<?> oImpl) {};
}
基本上我想知道如何在 C++ 中做到这一点。在下面的示例中,我在声明接口变量的行上出现编译器错误,因为它缺少类型。但当然,在类声明中,类型是未知的,应该在运行时分配,如main
.
#include <iostream>
#include <string>
template <class T>
class IGenericInterface
{
public:
IGenericInterface() {};
virtual ~IGenericInterface() {};
virtual T *createInstance(void) = 0;
};
template <class T>
class Implementation : public IGenericInterface<T>
{
public:
Implementation() {};
virtual ~Implementation() {};
T *createInstance(void)
{
T * t = new T;
return t;
}
};
class Parser
{
public:
Parser(IGenericInterface *oImpl) { mImpl = oImpl; };
virtual ~Parser() { delete mImpl; };
void doSomething(void) { do whatrever is needed; t = createInstance(); };
private:
IGenericInterface *mImpl;
};
int main()
{
Parser *p = new Parser(new Implementation<int>());
sleep(3);
return 0;
}
那么如何定义Parser
构造函数以使其传递任意接口参数?