gpt4 book ai didi

c++ - 访问从模板类派生的类中的基本成员函数

转载 作者:太空狗 更新时间:2023-10-29 19:52:33 26 4
gpt4 key购买 nike

<分区>

我在工作中开发了一个库,我设计了一个复杂的继承,其中包括模板类并从中派生。我的问题是基模板类具有虚拟重载运算符,它接受 2 个参数并返回一些值。在基类中实现了该运算符,大多数派生类不会重新实现该运算符。

其他一些类使用派生类进行某些工作并利用它们的运算符成员函数。只要派生类没有其他重载运算符,一切都可以正常工作,即使参数数量不同也是如此。如果这样做,则无法使用它作为 object() 访问基类运算符,因为编译器找不到合适的成员函数(提示参数计数不匹配)。

是否指定基类的默认模板参数并不重要。派生类的定义顺序也不会改变导致问题的运算符(它始终是 SpecificDerived 类)。

下面我提出了简化的问题。

[EDIT] 示例已简化

基类定义:

template<class ret_t>
class TemplateBase2
{
public:
virtual ~TemplateBase2()
{
}

virtual ret_t memberFunc(ret_t x)
{
return x * 2;
}
};

派生类定义的用户:

template <class worker, class ret_t>
ret_t gobble(worker w, float f)
{
return w.memberFunc((ret_t)f);
}

派生类:

class SpecificDerived2: public TemplateBase2<float>
{
public:
float memberFunc()
{
return 3.14;
}
};

主要功能:

#include <iostream>
#include "TemplateBase2.h"

using namespace std;

int main()
{
SpecificDerived2 sd2;

cout << "sd2: " << gobble<SpecificDerived2, float>(sd2, 3.14f) << endl;
return 0;
}

编译器退出并出现错误,声称没有匹配的函数用于从 gobble 函数调用“SpecificDerived2::memberFunc(float)”。仅当派生类或基类具有两个同名但不同参数的重载函数时才会出现问题。

我正在使用支持 C++11 的 MinGW32 4.8.1。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com