小编Ter*_*ryP的帖子

GNU C++如何检查-std = c ++ 0x何时生效?

我的系统编译器(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之前到达的新语言标准......呵呵.

c++ gcc g++ c++11

37
推荐指数
3
解决办法
3万
查看次数

如何递归耙? - 或合适的替代品

我希望我的项目顶级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耙子?

ruby rake build-process

6
推荐指数
1
解决办法
1847
查看次数

如何将函数设为私有方法?

我正在研究一种需要在不同位置重复一个小操作的方法,但要重复的代码应该是该方法的私有代码.显而易见的解决方案是嵌套函数.无论我尝试什么,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)

c# lambda encapsulation anonymous-function

4
推荐指数
2
解决办法
286
查看次数

标签 统计

anonymous-function ×1

build-process ×1

c# ×1

c++ ×1

c++11 ×1

encapsulation ×1

g++ ×1

gcc ×1

lambda ×1

rake ×1

ruby ×1