gpt4 book ai didi

C++ 访问变量而不使用其名称?

转载 作者:行者123 更新时间:2023-11-28 04:45:00 26 4
gpt4 key购买 nike

好吧,我真的不知道该如何解释,但我会试一试:

我正在尝试寻找一种无需使用变量名称即可访问变量的方法?我有两个函数执行完全相同的事情,但变量名称不同。仅仅因为一个结构具有相同的类型但名称不同,就必须拥有这两个功能对我来说似乎很愚蠢?

假设我有一个模板类:

template<class T>
class Controller
{
private:
T Object;
public:
bool YearCompare(int year1)
{
if (Object.???? == year1)
return 1;
return 0;
}
};

假设我有结构:

struct Container
{
int BuildYear;
int Volume;
};
struct Fruit
{
int GrowthYear;
string Name;
};

我的选择是: Controller<Container> Glass;Controller<Fruit> Apple; .

我想使用一个函数来返回与模板类一起使用的结构的年份。在这种情况下必须使用两个不同的函数会破坏使用模板类的目的。我现在的布局基本上是 structsclassesYear()是它们每个中的一个函数。

我想替代方案就是拥有 static bool YearCompare(int year1, int year2) .

我认为这不太可能。不过,我们将不胜感激,谢谢。

编辑:Year()实际上是比我在这里描述的功能更大的功能,因此我希望不必一直重复它。

最佳答案

既然你说这两个结构都有一个 Year() 方法,你可以简单地调用它,例如:

bool YearCompare(int year1)
{
return (Object.Year() == year1);
}

否则,也许可以定义一些适配器,根据结构类型返回适当的年份:

template<class T>
struct ControllerAdapter
{
};

template<class T, class Adapter = ControllerAdapter<T> >
class Controller
{
private:
T Object;
public:
bool YearCompare(int year1)
{
return (Adapter::GetYear(Object) == year1);
}
};

...

struct Container
{
int BuildYear;
int Volume;
};

template<>
struct ControllerAdapter<Container>
{
static int GetYear(const Container &c) { return c.BuildYear; }
};

struct Fruit
{
int GrowthYear;
string Name;
};

template<>
struct ControllerAdapter<Fruit>
{
static int GetYear(const Fruit &f) { return f.GrowthYear; }
};

关于C++ 访问变量而不使用其名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49418503/

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