我无法确定这里的问题,因为我使用了多种我不太熟悉的技术(将代码拆分到文件、模板中),所以我以我能想到的最简单的方式重新创建了它:
类.h:
class baseClass{
public:
virtual void myfunction(double dA, double dB) = 0; //Pure virtual function
virtual void myfunction(double dC) = 0;//Overloaded pure virtual function
};
class derivedClass1 :baseClass{
public:
void myfunction(double dA, double dB)override;
void myfunction(double dC)override;
};
class derivedClass2 :baseClass{
public:
void myfunction(double dA, double dB)override;
void myfunction(double dC)override;
};
类.cpp:
#include"classes.h"
void derivedClass1::myfunction(double dA, double dB){
//DO STUFF
}
void derivedClass2::myfunction(double dA, double dB){
//Do different stuff to derivedClass1
}
template <class type>
void type::myfunction(double dC){
double dA = dC;
double dB = 0; //In place of a complex calculation
myfunction(dA, dB) //Call the function for the
//relevant class and 2 input arguments.
}
主要内容:
#include"classes.h"
int main(){
derivedClass1 example;
example.myfunction(1.0);
}
我想做的是用一个模板函数只为一个输入参数重载所有 myfunction。因为有很多派生类,所以我想使用模板。然而,当我做这样的事情时,我得到了这个错误:
error C2063: 'myfunction' : not a function
有没有简单的方法或更好的解决方法?我试过将模板放在头文件中并删除类中的声明,但这也不起作用。
最佳答案
您根本不需要模板。多态性将为你解决这个问题。这对你有用吗:
class baseClass{
public:
virtual void myfunction(double dA, double dB) = 0; //Pure virtual function
virtual void myfunction(double dC) {
double dA = dC;
double dB = 0;
myfunction(dA, dB) // Calls the function of the derived class
}
};
然后你的主函数看起来像:
#include"classes.h"
int main(){
derivedClass1 example;
baseClass *caller = &example;
caller.myfunction(1.0);
}
关于c++ - 使用模板函数重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30082996/