假设我有一个界面
class I{
public:
virtual void f(int id)=0;
virtual void g(int id, float x)=0;
}
Run Code Online (Sandbox Code Playgroud)
我需要一个代理类,为指针映射做一些id
class Proxy : I
{
I * i[5];
public:
void f(int id)
{
i[id]->f(id);
}
void g(int id, float x)
{
i[id]->g(id, x);
}
}
Run Code Online (Sandbox Code Playgroud)
所以当我写作
Proxy *p;
p->f(1);
Run Code Online (Sandbox Code Playgroud)
在id = 1的对象上调用f
有几个这样的情况和接口相当大.所以我不想编写代理类中的所有函数.有没有办法自动完成?也许使用宏,模板,重载" - >"等.
考虑以下功能
f(int a[])
{
///CODE
for
for
if(a[i] > 0)
//change i on some condition
for
//CODE
if(a[i] > 0)
///CODE
}
f(int a[], int th)
{
///CODE
for
for
if(a[i] < th)
//change i on some condition
for
//CODE
if(a[i] < th)
///CODE
}
Run Code Online (Sandbox Code Playgroud)
所以我们有f函数和一个优化的巨体,几行是相同的:if(a [i]> 0)我想添加扩展这个函数,这样如果添加一个参数,那些行应该改为if(a [ i] <th)当我重载函数时,数百行重复(变得难以维护),所以我不想要这个.此外,我不能将身体划分为函数,因为"行"出现在太多的内部循环中.
第一个想法:
f(int a[], int th = -1)
{
///CODE
if(th == -1)
if(a[i] > 0)...
else
if(a[i] < th)...
///CODE
}
Run Code Online (Sandbox Code Playgroud)
我不能这样做是因为将额外的if引入内循环的性能开销.有没有办法有效和清晰地解决它,也许使用模板或宏?