c++ - 使用模板函数重载

标签 c++ function templates

我无法确定这里的问题,因为我使用了多种我不太熟悉的技术(将代码拆分到文件、模板中),所以我以我能想到的最简单的方式重新创建了它:

类.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/

相关文章:

c++ - 就内存使用而言,模板 + 仿函数/lambdas 不是最理想的吗?

templates - Angular 模态模板不显示

templates - Dart:WAITING模板完成

c++ - 析构函数的使用 = 删除;

mysql - 为什么这个mysql函数总是返回零值?

android - 无法为不是由该项目构建的目标指定链接库

c++ - 错误 : Invalid type 'int[int]' for array subscript

function - Lua - 是否可以检查 2 个函数是否相等?

c++ - 区域设置和编码(终端)有什么区别

c++ - Visual Studio 中 pragma pack 指令的范围