与模板功能过载
Overloading with a template function
本文关键字:功能 更新时间:2023-10-16
我在这里识别问题时遇到了困难我能想到的方式:
class.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;
};
class.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);
}
我想做的就是超载所有函数与模板函数的一个输入参数。由于有许多派生类,我想使用模板。但是,当我做这样的事情时,我会得到这个错误:
错误c2063:'myFunction':不是函数
是否有一种简单的方法可以做到这一点,或者有一种更好的方法?我尝试将模板放在标题文件中并删除类声明,但这也不起作用。
您根本不需要模板。多态性将为您解决这个问题。这个可以为您服务:
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);
}
I think you want to write general function outside any class to call the respective class function.
1) You don't need to put type::myfunction
template <class type>
void myfunction(baseClass *caller, double dc)
{
double dA = dC;
double dB = 0; //In place of a complex calculation
caller->myfunction(double dA, double dB) //Call the function for the
}
2) actually, you don't need type template for it if there are not multiple data types
void myfunction(baseClass *caller,double dc)
{
double dA = dC;
double dB = 0; //In place of a complex calculation
caller->myfunction(double dA, double dB) //Call the function for the
}
int main(){
derivedClass1 example;
myfunction(&example,1.0);
derivedClass2 example2;
myfunction(&example2,2.0);
baseClass example3;
myfunction(&example3,4.0);
}
我认为您提供的上述代码中有很多问题,如以下
void type::myfunction(double dC)
在以上语句中,"类型"应该是我的功能为会员的类名。相反,您将其作为模板类型。
我已将您的代码重写如下,
class baseClass
{
public:
template<typename Type>
void myfunction(Type dA, double dB)
{};
template<typename Type>
void myfunction(Type dC)
{};
};
class derivedClass1 :baseClass
{
public:
template<typename Type>
void myfunction(Type dA, double dB)
{
//DO STUFF
}
template<typename Type>
void myfunction(Type dC)
{
Type dA = dC;
double dB = 0; //In place of a complex calculation
myfunction(dA, dB);
};
};
class derivedClass2 :baseClass
{
public:
template<typename Type>
void myfunction(Type dA, double dB)
{
//Do different stuff to derivedClass1
}
template<typename Type>
void myfunction(Type dC)
{
Type dA = dC;
double dB = 0; //In place of a complex calculation
myfunction(dA, dB);
};
};
int main()
{
derivedClass1 example;
example.myfunction(1.0);
}
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 多态性和功能结合
- 带内存和隔离功能的SQLite
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- 类模板的成员功能的定义在单独的TU中完全专业化
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何在C++中获得"静态纯虚拟"功能?
- 两个文件使用彼此的功能-如何解决
- 我应该实现右值推送功能吗?我应该使用std::move吗
- QML按钮点击功能执行顺序
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 有没有可能有一个只有ADL才能找到的非好友功能
- 功能样式转换从 'int' 到 'ItemType' 的匹配转换
- 文件系统:复制功能的速度秘诀是什么
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 如何在Directwrite中获得给定字体的可用OpenType功能
- 对可变参数使用声明.如何选择正确的功能
- 询问在设计我的手臂模拟器功能表示格式1
- 功能原型的目的
- 这里在 Linux 中具有"CreatePipe"和"CreateProcessW"功能吗?