我知道这是不合法的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)) {
    }
}

这可能会为您提供所需的东西。您也可以对基类进行模板化,但是我猜这是不允许的。

08-15 21:57