我知道这是不合法的C++,因为编译器无法确定vtable到底有多大。我正在寻找替代品。
基本上,我有一个抽象基类,它为一组派生类定义了接口(interface)。通过此接口(interface)公开的某些函数的返回值由输入参数sKeyName确定。我的预期代码发布在下面。
class DataAccess
{
public:
template <class T>
virtual const Array2D<T>* GetData(std::string sKeyName) const = 0;
template <class T>
virtual Array2D<T>* GetData(std::string sKeyName) = 0;
};
有人可以给我解决方法以获得此功能吗?任何帮助表示赞赏。先感谢您。
最佳答案
您需要做的是定义一个单独的模板化接口(interface)。
class DataAccess {
template<typename T> class InnerInteface {
virtual Array2d<T>* GetData(std::string) = 0;
};
};
class OHai : public DataAccess, DataAccess::InnerInterface<float> {
};
int main() {
DataAccess* D = new OHai;
if (DataAccess::InnerInterface<float>* data =
dynamic_cast<DataAccess::InnerInterface<float>>(D)) {
}
}
这可能会为您提供所需的东西。您也可以对基类进行模板化,但是我猜这是不允许的。