用代理类实现二组数组

      C++语言在数组的支持方面不强其他语言强劲,如FORTRAN、BASIC、甚至在COBOL中可以产生二维数组、三维数组,乃至于n维数组,但你能C++中这么做吗?有同学不同意了,C++中可以产生二维数组啊,int data[2][3]不是吗?但是,如果这样:

还行吗?C++不允许!

 

      那么怎么办呢?《more effective c++》中Item 30有详细的介绍,但没有给出具体代码。本人实现了下:

      当然,其中也遇到了一些困难,现整理如下:

 

      FIRST ,代码第27行中,typename Array2D<T>::Array1D&,关键字typename有什么作用?

      typename有双重意义,具体参见<<effective c++>> Item 42。这里只由于其第二重意义。观察Array2D<T>::Array1D,其类型取决于template参数T。template内出现的名称如果相依于某个template参数,称之为从属名称。如果从属名称在class内呈嵌套状,则称之为嵌套从属名称。而嵌套从属名称有可能导致解析困难,所以必须在其前加上关键字typename表示其是一个类型。

      SECOND ,代码50~55读者是否感到有些奇怪。为什么不写成dim1Data = new myType[dim1](realDim2);呢?事实上,该语句是不能通过编译的。因为这不符合C++的语法。那么只能用点小聪明代替了。这里还要注意就是代码行62调用的是类赋值函数,刚开始笔者也在此处吃了亏。

 

 

      总之,学习C++之路还是很漫长啊。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
动态代理可以使用Java自带的 `java.lang.reflect.Proxy` 类来实现。首先需要定义一个接口,然后使用 `Proxy.newProxyInstance()` 方法来创建代理对象。这个方法需要传入三个参数:一个 `ClassLoader` 对象、一个 `Class` 对象的数组和一个 `InvocationHandler` 对象。 以下是一个简单的示例代码,用于动态代理获取接口实例: ```java public interface MyInterface { void doSomething(); } public class MyInvocationHandler implements InvocationHandler { private Object obj; public MyInvocationHandler(Object obj) { this.obj = obj; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object result = null; // 在调用方法前可以做一些前置处理 result = method.invoke(obj, args); // 在调用方法后可以做一些后置处理 return result; } } public class Main { public static void main(String[] args) { MyInterface instance = (MyInterface) Proxy.newProxyInstance( Main.class.getClassLoader(), new Class[] { MyInterface.class }, new MyInvocationHandler(new MyInterfaceImpl()) ); instance.doSomething(); } } ``` 在上面的示例代码中,`MyInterface` 是需要动态代理的接口,`MyInterfaceImpl` 是接口的实现类。`MyInvocationHandler` 是一个实现了 `InvocationHandler` 接口的类,它将实际的对象 `MyInterfaceImpl` 作为参数,并在 `invoke()` 方法中对方法进行前置和后置处理。 在 `main()` 方法中,我们使用 `Proxy.newProxyInstance()` 方法来创建代理对象,并将其转换为 `MyInterface` 类型。这样我们就可以使用代理对象来调用接口中的方法了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值