gpt4 book ai didi

c++ - 当 C++ 中没有多态时如何传递像多态这样的结构

转载 作者:行者123 更新时间:2023-11-28 06:35:23 27 4
gpt4 key购买 nike

我有一个场景,其中一个函数接受一个结构(现有的,existinghelper),它只是一个数据持有者。但是处理此数据的功能与此数据紧密绑定(bind)。现在我需要处理需要扩展结构的额外数据(to_be_extended、to_be_extended_helper)。实现这一目标的最佳方法是什么?

目前的代码如下所示: 结构现有 { 诠释; 诠释乙; };

struct existinghelper
{
int aindex;
int bindex;
};

struct to_be_extended
{
existing e;
int c;
};

struct to_be_extended_helper
{
int aindex;
int bindex;
int cindex;
};

void fun1(existing& e)
{

existinghelper(e);
}

预计:我需要相同的代码 (fun1) 来处理扩展结构和现有结构。逻辑上如下

void fun1(existing& e ) // can be <to_be_extended & e> this should support both      existing and to_be_extended structure both.
{
existinghelper(e); // or to_be_extended_helper(ee);
//above line should support both existinghelper and to_be_extended_helper structure

两者都有。 /* //逻辑上它应该像下面这样工作:

if(type == existing)

make existinghelper object.
else
make to_be_extended_helper object.

The problem is they are not polymorphic and are just data holders.
*/
}

最佳答案

为不同的参数类型重载函数:

void fun1(existing& e)
{
...
}

void fun1(to_be_extended& e)
{
...
}

如果两个函数有很多相同的代码,并且您正试图避免代码重复,则可以将通用功能分解到一个函数模板中。

template<typename T>
void identical_stuff(T& e)
{
...
}

void fun1(existing& e)
{
... non-identical stuff ...

identical_stuff(e);
}

void fun1(to_be_extended& e)
{
... non-identical stuff ...

identical_stuff(e);
}

关于c++ - 当 C++ 中没有多态时如何传递像多态这样的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26858019/

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