gpt4 book ai didi

c++ - 如何使用在子类上重载的相同方法使工作可变参数方法继承

转载 作者:搜寻专家 更新时间:2023-10-31 00:51:30 25 4
gpt4 key购买 nike

<分区>

以下代码有效:

class Test_Interface {
public:
template<typename... Args>
void Split(int weight, Args... args){
Split(weight);
Split(args...);
}

virtual void Split(int weight) {
std::cout << "Test_Interface::Split weight: " << weight << std::endl;
};
};

class Test : public Test_Interface {};

int main()
{
Test test;
test.Split(1, 20, 300);
}

但是如果我在 Test 类中为方法 Split 定义重载,例如:

class Test : public Test_Interface {
public:
virtual void Split(int weight) {
std::cout << "Test::Split weight: " << weight << std::endl;
};
};

然后我得到如下错误:error: no matching function for call to 'Test::Split(int, int, int)'

我知道如果我还在 Test 类中定义可变参数方法,例如:

class Test : public Test_Interface {
public:
template<typename... Args>
void Split(int weight, Args... args){
Split(weight);
Split(args...);
}

virtual void Split(int weight) {
std::cout << "Test::Split weight: " << weight << std::endl;
};
};

它再次工作,但随后它并没有做最初的预期,它只有一个地方(接口(interface))定义了可变参数方法,并且每个派生类仅具有非可变参数方法的自定义实现.我的目标是避免一遍又一遍地复制粘贴相同的代码并将其维护在多个地方。为什么子类不重载方法继承工作?有没有不用复制粘贴的方法?谢谢

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