天秤座的唐风

总会有一个人需要你的分享~!- 唐风 -

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  13 随笔 :: 0 文章 :: 69 评论 :: 0 Trackbacks
共2页: 1 2 
居然发现 SFINAE 正是我要的解决方案~!
后来试了一下下面这段实现,就 OK 了……
 
class DataFromFile
{
public:
    DataFromFile(
char const *a_fileName)
        :dataStream(a_fileName, std::ios::binary
|std::ios::in)
    
{ assert(dataStream.good());}
    
~DataFromFile() 
    
{ dataStream.close();}
public:
    template 
<typename T> inline
    typename boost::disable_if
<boost::is_class<T>, DataFromFile&>::type 
    
operator>> (T& a_data)        
    
{                                                  
        dataStream.read((
char *)&a_data, sizeof(T));   
        
return *this;                                     
    }

private:
    std::fstream dataStream;
}
;
 
必须要赞一下 boost 的 enable_if ,确实是应用 SFINAE 相当优雅的一种方式~!
 
你的回复中对于输入输出流的解释,我还是不太理解,呵呵,要学的东西真多哇,C++ 的 IO 流和 IO 流的本地化是我比较“恐惧”的部分。有没有什么好库可以代替?
对于学习这块,你有什么好的推荐?
 
 
re: SFINEA in C++ 唐风 2009-11-15 10:31
@OwnWaterloo
WLW 支持类似“Rich text”的编辑器(标签页是“编辑”,只要cppblog上的CSS没有另外设置,那么看到基本一致的效果)与一个纯文件的编辑器(标签页是“源代码”,可以获取相应的html代码),两个是连动的。

有时候我大面积更改已发布的文章中内容的时候,也是先在编辑页面修改,然后在源代码页面把html代码拷出来,直接帖在cppblog(cnblogs)的编辑器里(纯文本模式)。

WLW 在本地还有什么其它格式我就不清楚了,不过我想应该想满足diff的要求。
不过直接导入PDF貌似不行……传说word可以直接帖,保留格式,不过我没用过,我很久没用word了……哈哈

嗯嗯,特化~~
记得以前看 STL 的代码的时候,在区分不同类型的copy时,也有用这种方式。
对我个人而言,唯一觉得不喜欢特化的是感觉点“重复”的味道。

感觉 concept 要优雅很多(可惜C++0x中夭折了)。
re: SFINEA in C++ 唐风 2009-11-14 18:00
@OwnWaterloo
谢谢指正!已经修改了~
凭记忆写的,没验证就放上去了,不严谨啊不严谨啊,呵呵

你的大作刚刚阅读了,你学得比我透~
我没用C++做过什么实际的东西,一直浮在表面上。

PS:
关于代码字体:
直接用 Windows Live writer 加上插件 from visual studion 写的,然后直接发布,感觉还不错。在 cnblog 上正文的字体没变化,不过 cppblog 上,有些字的大小变了,唉……
博主的标题把CppBlog的侧边栏撑爆了!呵呵
std::map
本身不就是排序的吗?为什么还要倒到vector里排?不解
re: std::initializer_list in C++0x 唐风 2009-08-27 08:55
@YESHG!
“够用”是好,“好用”那就更好啦!呵呵
这次的新标准是经过10年沉淀的结果,自然散发出很成熟和理性的气息。
虽然不可能做到完美,但也非常出色了。

以后我们再使用std::map,结合着new for loop和auto,就会觉得它和python中的Dict一样的方便和好用。感觉有点动态的味道!

再没有lambda之前,std::for_each之类的泛型算法有如鸡肋,boost::lambda的实现又过于复杂使人望而生畏。现在好了,我们可以自由地“在线”定义函数。这会促进更多的更好的泛型代码出现并广泛应用。也就促进了抽象和重用。
re: std::initializer_list in C++0x 唐风 2009-08-25 22:33
@YESHG!
花个几天时间看下Wiki上的条目就OK啦,不用每天研究,哈哈。。

新版的C++在“易用性”上有了不少改进。
但对于C++,我最想的是能有好、符合标准的C++编译器支持各种嵌入式器件。
这位仁兄已很很猛了,哈哈
向你学习啊~~~~~
re: windbg基础篇--异常上下文 唐风 2009-08-22 16:30
在下最近才刚开始学
希望以后能多看到你写的漂亮的文章!!!
关注中……
南大阿sir的好帖
后业被北工大的曾毅“借”用,在网上可查,颇有一段风波。
自己顶一下,呵呵~!
今天看了 BS 自己的观点,虽然失望,但还是冷静。大师的风范跃于纸上:
http://www.ddj.com/cpp/218600111;jsessionid=WR2OKD31YZVEKQSNDLOSKHSCJUNN2JVN?pgno=1
原来他自己也投了反对票,虽然他为此工作了七年之久~
“Please don't condemn the committee for being cautious. This was not a "Bjarne vs. the committee fight," but a discussion trying to balance a multitude of serious concerns. I and others are disappointed that we didn't take the opportunity of "fix and ship," but C++ is not an experimental academic language. Unless members are convinced that the risks for doing harm to production code are very low, they must oppose. Collectively, the committee is responsible for billions of lines of code. For example, lack of adoption of C++0x or long-term continued use of unconstrained templates in the presence of "concepts" would lead to a split of the C++ community into separate sub-communities. Thus, a poor "concept" design could be worse than no "concepts." Given the choice between the two, I too voted for removal. I prefer a setback to a likely disaster. ”
 
高山仰止~!
re: USACO征程的新开始 唐风 2009-07-14 08:36
LZ你好
虽然我没试过USACO,在算法方面也很“陀”,但我想,USACO可能不会是让人在C++的认识和运用上会产生质的飞跃的东西?

不过,羡慕你,青春年少时就有这么多的想法和这么好的条件。
加油,相信你一定会成功的~!
!!
七星重剑,出刃见血,哈哈。
学习了!
re: 这是我向往的生活 唐风 2009-06-29 20:52
“人道天凉好个秋。”“少年不识愁滋味”
原词意境与您的大作貌似相反……
PS:
  附上的代码中,第一个 while 中(切线斜率大于 -1 )的判别子 p 是直接用椭圆方程来计算的,第二个 while 中(切线斜率小于 -1 )中使用的是增量计算。
  原来第一个 while 中也是使用增量法来计算的,但在斜率为 -1 的附近,椭圆的变形比较严重,感觉像是一段很明显的 -1 斜率的直线。可能是计算式的精度有问题?但没有细查。先改成上面的方式,用着先,以后再回来优化。
Mark 下。
re: 推荐数学书 唐风 2009-06-15 20:32
统计学、概率论不受重视么?
感觉挺重要的啊。
确实是很精巧!!
嗯,看来多读读高手写的代码还是很有裨益的。

不过坦白地讲,我个人更欣赏用C++模板来实现这类似的效果(只在必要的时候辅之以宏,比如要实现(__NR_##name)或是换函数名之类的效果)。

在Boost::lambda中也有类似的技巧,不过是宏加模板来完成。
一般来讲,泛化类型时用模板,而要修改字符以生成不同的函数时,再加点宏的技巧。
上面的你举的例子小改下:
#define _syscall1(ResType, functionName, a) \ 
template 
<typename Arg>                     \ 
ResType functionName(Arg a)                 \ 
{                                           \ 
    ResType __res;                          \ 
    __asm__ 
volatile ("int $0x80"           \ 
        : 
"=a" (__res)                      \ 
        : 
"0" (__NR_##functionName),"b"(a));\ 
    
if (__res >= 0)                         \ 
    
return __res;                           \ 
    errno 
= -__res;                         \ 
    
return -1;                              \ 
}
 

当然,Linux内核是不用C++的,所以宏是唯一的选择了~~~
共2页: 1 2