gpt4 book ai didi

c++ - 如何从界面中删除不需要的功能

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:32:05 26 4
gpt4 key购买 nike

我有一个接口(interface)类 MyFunction。这个类中有三个具有以下签名的函数:

virtual bool Eval(int& iReturnVal, size_t szArgumentCount, list<Param> lParameterList) = 0;
virtual bool Eval(double& dReturnVal, size_t szArgumentCount, list<Param> lParameterList) = 0;
virtual bool Eval(char*& zReturnVal, size_t szArgumentCount, list<Param> lParameterList) = 0;

现在,MyFunction 的任何实现都只需要根据需要返回的值类型来实现这些函数之一。但是即使其他两个函数是这样的,我也必须实现所有 3 个函数:

virtual bool Eval(double& dReturnVal, size_t szArgumentCount, list<Param> lParameterList){return false;}

这看起来不太好。或者,我可以在接口(interface)中像这样声明所有三个函数:

virtual bool Eval(int& iReturnVal, size_t szArgumentCount, list<Param> lParameterList){return false;}
virtual bool Eval(double& dReturnVal, size_t szArgumentCount, list<Param> lParameterList){return false;}
virtual bool Eval(char*& zReturnVal, size_t szArgumentCount, list<Param> lParameterList){return false;}

看起来也很丑。这两个哪个不那么丑?或者有更好的方法吗?

编辑:

关于 D Krueger 的方法:

#include <iostream>

using namespace std;

class Base
{
public:
template<typename T>
void F(T){cout << "Type T" << endl;}
};

class Imp : public Base
{
public:
template<int>
void F(int){cout << "Type int" << endl;}
};

int main(int argc, char** argv)
{
Base* pB;
Imp oI;
pB = &oI;

pB->F(1);
}

虽然是派生的,但看起来特化不适用于跨类。由于模板函数不能是虚拟的,这看起来是一个绝望的情况。

最佳答案

由于在 Eval() 中使用的类型与实现数量之间存在一对一的映射,因此模板成员函数应该起作用。

class MyFunction {

template <class T>
bool Eval(T& returnVal, size_t szArgumentCount, list<Param> lParameterList)
{ return false; }
};

然后为不应返回 false 的类型实现特化。

这只需要一个通用实现来返回 false 以及在任何情况下都需要的三个实现。

关于c++ - 如何从界面中删除不需要的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3984375/

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