好吧真的不知道怎么解释这个,但我会试一试:
我试图想办法不使用他们的名字来访问变量?我有两个函数执行完全相同的事情,但对于不同的变量名称。我必须拥有这两个函数似乎很愚蠢,因为一个结构具有相同的类型但名称不同?
说我有一个模板类:
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()
实际上是我在这里所描述的更大的功能,因此不必不断重复它。
答案 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; }
};