gpt4 book ai didi

c++ - 传递 C++ 的不同类对象

转载 作者:太空宇宙 更新时间:2023-11-04 16:11:15 25 4
gpt4 key购买 nike

我有一些预定义的类

class x
{
int y;
} xx;
class z
{
int y;
} zebra;

我想根据几个条件将 xxzebra 传递给函数

function(x xx) or function(z zebra)

由于 "function" 的功能对于以上两者都是相同的,我如何编写一个可以同时使用 xxzebra。我不允许重新定义或声明类

最佳答案

如果你需要类似的东西

void add3(x xx)
{
xx.y += 3;
}

要可用于 z 类,最好使用模板函数:

template<typename T>
void add3(T value)
{
value.y += 3;
}

另一种选择是使用重载并定义两个函数:

void add3(x xx)
{
xx.y += 3;
}

void add3(z zebra)
{
zebra.y += 3;
}

xz 这两个类在抽象上应该不同时,重载可能是更好的主意。

如果它们的抽象相同,它们应该基于共享接口(interface)(例如 basey 字段以及 xz 应该继承 base 然后你就只有 void add3(base b))。您可以在 std::ios ( http://www.cplusplus.com/reference/ios/ ) 中看到这方面的示例,其中输入和输出 (std::istream, std::ostream) 都是流,但在实际使用时它们提供的功能截然不同。

另一方面,许多 STL 容器没有这种接口(interface)模式,因此模板解决方案并不总是一个坏主意。这只是您的风格和使用的资源的问题。

关于c++ - 传递 C++ 的不同类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28474472/

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