小编Vol*_*kan的帖子

自动代理类

假设我有一个界面

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

有几个这样的情况和接口相当大.所以我不想编写代理类中的所有函数.有没有办法自动完成?也许使用宏,模板,重载" - >"等.

c++ macros templates design-patterns proxy-classes

8
推荐指数
1
解决办法
1030
查看次数

如何避免重复

考虑以下功能

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引入内循环的性能开销.有没有办法有效和清晰地解决它,也许使用模板或宏?

c++ macros performance templates overloading

0
推荐指数
1
解决办法
179
查看次数