小编Riv*_*ver的帖子

嵌套函数的实现

我最近发现gcc允许定义嵌套函数.在我看来,这是一个很酷的功能,但我想知道如何实现它.

虽然通过将上下文指针作为隐藏参数传递来实现嵌套函数的直接调用当然不难,但gcc还允许获取指向嵌套函数的指针并将此指针传递给任意其他函数,而该函数又可以调用嵌套函数上下文的功能.因为调用嵌套函数的函数只有要调用的嵌套函数的类型,所以它显然无法传递上下文指针.

我知道,其他语言如Haskell有一个更复杂的调用约定允许部分应用程序支持这些东西,但我认为没有办法在C中这样做.如何实现这一点?

以下是一个说明问题的案例的小例子:

int foo(int x,int(*f)(int,int(*)(void))) {
  int counter = 0;
  int g(void) { return counter++; }

  return f(x,g);
}
Run Code Online (Sandbox Code Playgroud)

此函数调用一个函数,该函数调用一个函数,该函数从上下文返回一个计数器并同时递增它.

c gcc nested-function

26
推荐指数
1
解决办法
3693
查看次数

需要C++ R - tree实现

有没有人知道在生产代码R-tree实现中使用的好和简单?(实际上,任何实现 - R*, R+或者PR-tree会很棒)

它是一个模板或库实现无关紧要,但谷歌发现的一些实现看起来非常令人失望......

c++ r-tree

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

除以零:未定义的行为或实现在C和/或C++中定义?

关于除零,标准说:

C99 6.5.5p5 - /运算符的结果是第一个操作数除以第二个操作数的商; %运算符的结果是余数.在这两个操作中,如果第二个操作数的值为零,则行为未定义.

C++ 03 5.6.4 - 二进制/运算符产生商,二进制%运算符从第一个表达式除以第二个表达式得到余数.如果/或%的第二个操作数为零,则行为未定义.

如果我们将上述段落视为面值,答案显然是两种语言的未定义行为.但是,如果我们进一步了解C99标准,我们会看到以下段落似乎是矛盾的(1):

C99 7.12p4 - 宏INFINITY扩展为float类型的常量表达式,表示正无穷大或无符号无穷大(如果可用);

标准是否有某种黄金法则,其中未定义的行为不能被(可能)矛盾的陈述所取代?除此之外,我认为如果你的实现定义了INFINITY宏,那么将零除法定义为这样是不合理的.但是,如果您的实现没有定义这样的宏,则行为是Undefined.

我很好奇这两种语言在这个问题上的共识是什么(如果有的话).如果我们谈论整数除法int i = 1 / 0与浮点除法,答案会改变float i = 1.0 / 0.0吗?

注意(1) C++ 03标准讨论了<cmath>包含INFINITY宏的库.

c c++ divide-by-zero undefined-behavior

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

Java N-Tuple实现

我刚刚创建了一个类型安全的Java n-tuple.
我正在使用一些非传统的方法来实现类型安全(我只是为了好玩).

有人可以就改进它或一些可能的缺陷提供一些意见.

public class Tuple {
    private Object[] arr;
    private int size;
    private static boolean TypeLock = false;
    private static Object[] lastTuple = {1,1,1}; //default tuple type

    private Tuple(Object ... c) {
        // TODO Auto-generated constructor stub
        size=c.length;
        arr=c;
        if(TypeLock)
        {
            if(c.length == lastTuple.length)
                for(int i = 0; i<c.length; i++)
                {
                    if(c[i].getClass() == lastTuple[i].getClass())
                        continue;
                    else
                        throw new RuntimeException("Type Locked");
                }
            else
                throw new RuntimeException("Type Locked");
        }

        lastTuple = this.arr;
    }

    public static void setTypeLock(boolean typeLock) {
        TypeLock …
Run Code Online (Sandbox Code Playgroud)

java tuples type-safety

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

在图中是否有用于社区检测的算法实现?

我正在寻找社区检测算法的实现,例如Girvan-Newman算法(2002).我访问了该领域的几位研究人员的网站(Newman,Santo等)但无法找到任何代码.我想有人在那里发布了这些算法的实现(甚至可能是一个工具包?),但我似乎无法找到它.

graph-theory graph

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

如何在Visual Studio中找到哪些类实现给定的接口?

我有一个解决方案.
我有一个界面.
我有几个实现该接口的类.

我可以使用"查找所有引用"来查找接口的实现位置,但它也返回接口是返回类型的结果,或者类显式实现接口方法的结果.

有没有更好的方法来快速/轻松地找到哪些类实现接口?

c# interface visual-studio-2008 visual-studio

23
推荐指数
2
解决办法
7525
查看次数

套接字发送和接收字节数组

在服务器中,我通过Java套接字向客户端发送了一个字节数组

byte[] message = ... ;

DataOutputStream dout = new DataOutputStream(client.getOutputStream());
dout.write(message);
Run Code Online (Sandbox Code Playgroud)

如何从客户端接收此字节数组?

java sockets arrays

23
推荐指数
2
解决办法
13万
查看次数

所有正则表达式实现的列表?

是否有网上的正则表达式实施列表,显示它们的差异/相似之处?

对于exaple,Emacs elisp Regex与JavaScript或Perl正则表达式不同,更不用说不同编辑器软件使用的所有不同实现,

例如,VS2010使用{}而不是()为反向引用分组表达式.

曾几何时,我可以依赖O'Reilly的Regex Pocket快速参考中的正则表达式转换列表,但在线的内容会更容易,更完整.

顺便说一句,我知道(当然)http://www.regular-expressions.info/这是好的,但没有接近完成.

我将根据此处发布的答案以及我能找到的任何其他内容编制列表.

变化

一般变化

实现的差异通常{}()[]^$是处理特殊字符的方式(转义规则等),偶尔也会替换; POSIX字符类的处理/可用性,例如[:digit:],选项的使用,例如g i等.

(正在进行的工作,如果你知道任何警告,这些实现的差异请添加它们作为答案)

  • ActionScript - 使用ECMA样式
  • Delphi(.Net) - 使用.Net风格.Delphi Win32没有本机正则表达式,但可以使用PCRE包装器.
  • Emacs/ELisp - 有两种不同的上下文,\\在elisp中使用,以及\regexp-replace.(){}[]使用正则表达式时,特殊字符会被转义,就像使用它们一样sed.
  • Eclipse - 搜索使用Java样式正则表达式.
  • GNU(Linux) - POSIX BRE/ERE
  • Grep - POSIX BRE/ERE
  • Groovy - 使用Java风格.
  • 的IntelliJ
  • Java - Java风格.
  • JavaScript - 使用ECMA样式.
  • NetBeans的
  • .NET - 使用System.Text.RegularExpressions中的类
  • Notepad ++ - PCRE
  • PCRE(C/C++) - 开源库,被许多第三方语言和应用程序使用.(例如PHP,TCL,R等)
  • Perl …

regex programming-languages

23
推荐指数
1
解决办法
5395
查看次数

如何在编译器中实现C++虚拟继承?

编译器如何实现虚拟继承?

在以下代码中:

class A {
  public:
    A(int) {}
};

class B : public virtual A {
  public:
    B() : A(1) {}
};

class C : public B {
  public:
    C() : A(3), B() {}
};
Run Code Online (Sandbox Code Playgroud)

编译器是否生成两个B::ctor函数实例,一个没有A(1)调用,一个带有它?因此,当B::constructor从派生类的构造函数调用时,将使用第一个实例,否则使用第二个实例.

c++ compiler-construction inheritance virtual-inheritance

23
推荐指数
2
解决办法
5483
查看次数

枚举中的私有静态最终变量

我正在尝试在枚举中创建一个私有静态最终变量,但我不断收到编译错误.有谁知道如何解决这一问题?

此行有多个标记

  • 语法错误,插入"Identifier"以完成EnumConstantHeaderName
  • 语法错误,插入"}"以完成EnumBody
class Foo {
  ...

  public enum MyEnum {
    private static final String MY_STRING = "a string I use in a constructor";
    private static final String MY_OTHER_STRING = "a string I use in another constructor";      

    MyEnumType(1, MY_STRING),
    MyEnumType2(2, MY_STRING),
    MyEnumType3(3, MY_OTHER_STRING);

    MyEnum(int num, String str) {
      ...
    } 
  }
 ...
}
Run Code Online (Sandbox Code Playgroud)

java enums compiler-errors

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