我的系统编译器(gcc42)可以正常使用我想要的TR1功能,但是试图支持除系统之外的新编译器版本,尝试访问TR1标头和#error要求-std = c ++ 0x选项因为它如何与库或某些集线器接口.
/usr/local/lib/gcc45/include/c++/bits/c++0x_warning.h:31:2: error: #error This file requires compiler and library support for the upcoming ISO C++ standard, C++0x. This support is currently experimental, and must be enabled with the -std=c++0x or -std=gnu++0x compiler options.
Run Code Online (Sandbox Code Playgroud)
必须提供额外的开关是没有问题的,在这个系统(FreeBSD)下支持GCC 4.4和4.5,但显然它改变了画面!
使用我的系统编译器(g ++ 4.2默认方言):
#include <tr1/foo>
using std::tr1::foo;
Run Code Online (Sandbox Code Playgroud)
使用带有-std = c ++ 0x的较新(4.5)版本的编译器:
#include <foo>
using std::foo;
Run Code Online (Sandbox Code Playgroud)
无论如何使用预处理器,我可以判断g ++是否在启用C++ 0x功能的情况下运行?
我正在寻找的东西是这样的:
#ifdef __CXX0X_MODE__
#endif
Run Code Online (Sandbox Code Playgroud)
但是我没有在手册中或网上找到任何内容.
按照这个速度,我开始认为生活会更容易,使用Boost作为依赖,而不用担心在TR4之前到达的新语言标准......呵呵.
我希望我的项目顶级Rakefile使用树中更深的rakefiles来构建东西; 即顶级rakefile说明如何构建项目(大图),而较低级别的rakefile构建一个特定的模块(本地图片).
当然,只要可以在任务之间共享,就可以使用共享的一组配置来完成这些操作:所以主要是关于保持对需要构建的描述,尽可能接近正在构建的源.例如/Source/Module/code.foo和cie应该使用/ Source/Module/Rakefile中的指令构建; 和/ Rakefile理解模块之间的依赖关系.
我不在乎它是否使用多个rake进程(ala recursive make),或者只是创建单独的构建环境.无论哪种方式,它都应该是可自包含的,以便由队列处理:这样可以同时构建非依赖模块.
问题是,你真的用Rake做了那样的事情!?我无法在互联网上找到任何有意义的东西,也没有在文档中找到.我尝试创建一个新的Rake :: Application对象并进行设置,但无论我尝试调用什么方法,只有异常或"不知道如何构建任务':默认'"错误被抛出.(是的,所有rakefiles都有:default).显然,人们可以在子目录中为:modulename任务执行'rake',但这会丢弃给予顶级的选项; 想想$(MAKE)和$(MAKEFLAGS).
任何人都知道如何正确地做一些像recursive耙子?
我正在研究一种需要在不同位置重复一个小操作的方法,但要重复的代码应该是该方法的私有代码.显而易见的解决方案是嵌套函数.无论我尝试什么,C#编译器对我来说都是barfs.
大致等于这个Perl片段的东西:
my $method = sub {
$helper_func = sub { code to encapsulate };
# more code
&$helper( called whenever needed );
# more code
}
Run Code Online (Sandbox Code Playgroud)
正是我在谈论的,以及我在C#中想要实现的目标.
类中没有其他方法应该能够在此上下文中访问辅助函数.在C#中编写这个构造的最合理的方法,就像在我看来会是这样的:
var helper = (/* parameter names */) => { /* code to encapsulate */ };
Run Code Online (Sandbox Code Playgroud)
实际上让编译器获得了保持.
由于这样的赋值是被禁止的,因为使用较旧的delegate(){}语法代替lambda,因此在方法中声明一个委托类型 - 然而csc实际上允许我写的是,这是:
private delegate /* return type */ Helper(/* parameters */);
private /* return type */ method(/* parameters */) {
Helper helper = (/* parameter names */) => {
/* code to …Run Code Online (Sandbox Code Playgroud)