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

C++ C++;访问变量而不使用其名称?,c++,templates,variables,C++,Templates,Variables,好的,我真的不知道该如何解释,但我会尝试一下: 我想找到一种不用名字就能访问变量的方法?我有两个函数,它们执行完全相同的操作,但变量名不同。在我看来,仅仅因为一个结构具有相同的类型但名称不同,就必须拥有这两个函数是愚蠢的 假设我有一个模板类: template<class T> class Controller { private: T Object; public: bool YearCompare(int year1) { if (Obje

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

我想找到一种不用名字就能访问变量的方法?我有两个函数,它们执行完全相同的操作,但变量名不同。在我看来,仅仅因为一个结构具有相同的类型但名称不同,就必须拥有这两个函数是愚蠢的

假设我有一个模板类:

template<class T>
class Controller
{
private:
    T Object;
public:
    bool YearCompare(int year1)
    {
        if (Object.???? == year1)
            return 1;
        return 0;
    }
};
我的选择是:
控制器玻璃
控制器苹果

我想使用one函数返回模板类使用的结构的年份。在这种情况下,必须使用两个不同的函数将无法达到创建模板类的目的。我现在的布局基本上是
structs
classes
Year()
是其中的一个函数

我想另一种选择是使用
静态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; }
};
模板
结构控制器适配器
{
};
模板
类控制器
{
私人:
T对象;
公众:
布尔年比较(国际年1)
{
返回(适配器::GetYear(对象)=year1);
}
};
...
结构容器
{
国际建筑年;
国际卷;
};
模板
结构控制器适配器
{
静态int GetYear(const容器&c){return c.BuildYear;}
};
结构果
{
内生长年;
字符串名;
};
模板
结构控制器适配器
{
静态int GetYear(const Fruit&f){返回f.GrowthYear;}
};

我会停止实现generic
ControllerAdaper::GetYear
,因此如果没有专门化,那么这是一个可以纠正的编译器错误。
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; }
};