C ++ Access变量没有使用它的名字?

时间:2018-03-22 00:08:53

标签: c++ templates variables

好吧真的不知道怎么解释这个,但我会试一试:

我试图想办法不使用他们的名字来访问变量?我有两个函数执行完全相同的事情,但对于不同的变量名称。我必须拥有这两个函数似乎很愚蠢,因为一个结构具有相同的类型但名称不同?

说我有一个模板类:

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;

我想使用one函数返回模板类使用的结构年份。在这种情况下必须使用两个不同的函数会破坏模板类的目的。我现在的布局基本上是structs classes,而Year()是每个布局中的函数。

我认为替代方案只是拥有static bool YearCompare(int year1, int year2)

我认为这不太可能..任何帮助都会受到赞赏,谢谢。

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

1 个答案:

答案 0 :(得分:1)

既然你说两个结构都有一个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; }
};