在C中传递输入函数之前更改输入函数

时间:2015-07-17 18:19:06

标签: c abstract-data-type

很抱歉,如果这听起来有点过于具体,但对我的问题的答案将是一个更广泛问题的答案。所以这是我的问题的背景:

在摘要数据类型中,我正在构建一个"胶水层"在两个ADT之间 - 调度程序和堆 - 称为容器。调度程序为它提供了一个比较函数,它应该传递给Heap一个函数,该函数为任何输入返回该比较函数的否定结果。 原因是Heap是最大堆,但Scheduler需要绘制最小元素。 我不被允许将堆改为最小堆或全部。可能,我不允许更改Scheduler的比较功能以返回它通常返回的负数,或者再次返回AT ALL。 Container可以反转函数并将其提供给Heap。 问题是它到底怎么办?!

我使用的类型是:

typedef void* Data;
typedef int (*DataCompareFunc)(const Data data1,const Data data2);

调度程序调用函数:

Container* ContainerCreate(DataCompareFunc compFunc)

HeapCreate的签名是:

Heap* HeapCreate(DataCompareFunc compFunc);

ContainerCreate以什么方式将否定函数转移到HeapCreate

1 个答案:

答案 0 :(得分:0)

通常使用Lambda和Closure函数创建此类功能。

Lambda& C ++ 11支持闭包,但即使在旧式C ++中,您也可以编写Functors

对于import os from nltk.corpus import wordnet as wn from nltk.corpus import WordNetCorpusReader cwd = os.getcwd() nltk.data.path.append(cwd) wordnet16_dir="wordnet-1.6/" wn16_path = "{0}/dict".format(wordnet16_dir) wn16 = WordNetCorpusReader(os.path.abspath("{0}/{1}".format(cwd, wn16_path)), nltk.data.find(wn16_path)) def synset2offset(ss): return str(ss.offset()).zfill(8) + '-' + ss.pos() wn16_ids = [synset2offset(ss) for ss in wn16.all_synsets()] wn30_ids = [synset2offset(ss) for ss in wn.all_synsets()] senses30 = wn.synsets('gouvernement',lang=u'fre') senses16 = [ss for ss in wn.synsets('gouvernement',lang=u'fre') if synset2offset(ss) in wn16_ids] 来说,它更难,但GCC有一些support

在闭包中用匿名函数编写一个否定函数是(伪代码)

C

其中function negate(f) { return function(){ not f(); } } 将返回一个函数,该函数会在negate(somefunction)返回true等时返回somefunction