使用语句实现C++等效的C#

ada*_*ter 11 c# c++ templates using-statement

我正在寻找一种优雅的解决方案,用于在C++中实现C#using语句的等价物.理想情况下,结果语法应该易于使用和阅读.

C#使用语句详细信息在这里 - http://msdn.microsoft.com/en-us/library/yh598w02(v=vs.80).aspx

我不确定解决方案是使用函数指针与类上的析构函数,某种形式的巧妙模板编程甚至是元模板编程.基本上我不知道从哪里开始......

Dav*_*nan 27

您不需要在C++中实现它,因为RAII的标准模式已经满足您的需求.

{
    ofstream myfile;
    myfile.open("hello.txt");
    myfile << "Hello\n";
}
Run Code Online (Sandbox Code Playgroud)

当块作用域结束时,myfile将销毁该文件并关闭文件并释放与该对象关联的任何资源.

using声明存在于C#中的原因是在try/finally和IDisposable.周围提供一些语法糖.在C++中根本不需要它,因为这两种语言不同,并且每种语言的问题都有所不同.

  • 这远远优于C#`using`,它也适用于C++/CLI中的.NET对象.C++语法要好得多,因为尽管你仍然需要记住使用值语义语法:(1)你可以将它用于每种类型,无论它是否实现`IDisposable`,或者对于接口,不同的对象可能或者可能没有,以及(2)它适用于班级成员. (2认同)