小编xia*_*ian的帖子

如何将参数传递给define_method?

我想将一个参数传递给使用define_method定义的方法,我该怎么做?

ruby metaprogramming

151
推荐指数
4
解决办法
6万
查看次数

Python装饰器让函数忘记它属于一个类

我正在尝试编写一个装饰器来做日志记录:

def logger(myFunc):
    def new(*args, **keyargs):
        print 'Entering %s.%s' % (myFunc.im_class.__name__, myFunc.__name__)
        return myFunc(*args, **keyargs)

    return new

class C(object):
    @logger
    def f():
        pass

C().f()
Run Code Online (Sandbox Code Playgroud)

我想要打印:

Entering C.f
Run Code Online (Sandbox Code Playgroud)

但我收到此错误消息:

AttributeError: 'function' object has no attribute 'im_class'
Run Code Online (Sandbox Code Playgroud)

据推测,这与'logger'中'myFunc'的范围有关,但我不知道是什么.

python reflection metaprogramming

59
推荐指数
6
解决办法
2万
查看次数

TCP:如何生成seq/ack数字?

我目前正在开发一个程序,它可以嗅探从特定地址发送和接收的TCP数据包.我想要完成的是回复定制的数据包到某些收到的数据包.我已经完成了解析.我已经可以生成有效的以太网,IP和 - 大部分 - TCP数据包.

我唯一无法弄清楚的是如何确定seq/ack数.

虽然这可能与问题无关,但程序是使用WinPCap用C++编写的.我要求任何可能对我有帮助的提示,文章或其他资源.

c++ networking tcp winpcap

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

如何将ASCII中字符的十六进制值写入文本文件?

这是我目前所拥有的:

void WriteHexToFile( std::ofstream &stream, void *ptr, int buflen, char *prefix )
{
    unsigned char *buf = (unsigned char*)ptr;

    for( int i = 0; i < buflen; ++i ) {
        if( i % 16 == 0 ) {
            stream << prefix;
        }

        stream << buf[i] << ' ';
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试过做stream.hex,stream.setf(std :: ios :: hex),以及搜索一下Google.我也尝试过:

stream << stream.hex << (int)buf[i] << ' ';
Run Code Online (Sandbox Code Playgroud)

但这似乎也不起作用.

以下是它当前生成的一些输出的示例:

Í Í Í Í Í Í Í Í Í Í Í Í Í Í Í …
Run Code Online (Sandbox Code Playgroud)

c++ hex ascii ofstream

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

gcc&cpp中的"foreach values"宏

我有一个'foreach'宏我经常在C++中使用,适用于大多数STL容器:

#define foreach(var, container) \
  for(typeof((container).begin()) var = (container).begin(); \
      var != (container).end(); \
      ++var)
Run Code Online (Sandbox Code Playgroud)

(注意'typeof'是gcc扩展名.)它的使用方式如下:

std::vector< Blorgus > blorgi = ...;
foreach(blorgus, blorgi) {
  blorgus->draw();
}
Run Code Online (Sandbox Code Playgroud)

我想做一些类似迭代地图值的东西.也许称之为"foreach_value".所以不要写作

foreach(pair, mymap) {
  pair->second->foo();
}
Run Code Online (Sandbox Code Playgroud)

我会写的

foreach_value(v, mymap) {
  v.foo();
}
Run Code Online (Sandbox Code Playgroud)

我不能想出一个会这样做的宏,因为它需要声明两个变量:迭代器和值变量(上面的'v').我不知道如何在for循环的初始化器中做到这一点,即使使用gcc扩展.我可以在foreach_value调用之前声明它,但是它会与同一范围内的foreach_value宏的其他实例冲突.如果我可以将当​​前行号后缀为迭代器变量名,它可以工作,但我不知道该怎么做.

c++ gcc

12
推荐指数
2
解决办法
8337
查看次数

在Python中,如何获得成员函数类的名称?

我有一个函数,它将另一个函数作为参数.如果函数是类的成员,我需要找到该类的名称.例如

def analyser(testFunc):
    print testFunc.__name__, 'belongs to the class, ...
Run Code Online (Sandbox Code Playgroud)

我想

testFunc.__class__ 
Run Code Online (Sandbox Code Playgroud)

会解决我的问题,但这只是告诉我testFunc是一个函数.

python reflection metaprogramming

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

有没有更好的方法来反转内存中的字节数组?

typedef unsigned char Byte;

...

void ReverseBytes( void *start, int size )
{
    Byte *buffer = (Byte *)(start);

    for( int i = 0; i < size / 2; i++ ) {
        std::swap( buffer[i], buffer[size - i - 1] );
    }
}
Run Code Online (Sandbox Code Playgroud)

这个方法现在做的是它在内存中反转字节.我想知道的是,有没有更好的方法来达到同样的效果?整个"尺寸/ 2"部分似乎是一件坏事,但我不确定.

编辑:我刚刚意识到我为这个问题提出的标题有多糟糕,所以我[希望]修复它.

c++ memory swap std

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

什么是一些很好的Xcode脚本来加速开发?

Xcode允许您创建自动脚本以执行重复性任务.您编写了哪些脚本来加速开发?

scripting xcode metaprogramming

9
推荐指数
1
解决办法
4642
查看次数

用于快速和脏的XML序列化的Ruby代码?

给定一个中等复杂的XML结构(数十个元素,数百个属性),没有XSD,并且希望创建一个对象模型,那么避免编写样板from_xml()和to_xml()方法的优雅方法是什么?

例如,给定:

<Foo bar="1"><Bat baz="blah"/></Foo>
Run Code Online (Sandbox Code Playgroud)

我如何避免编写无穷无尽的序列:

class Foo
  attr_reader :bar, :bat

  def from_xml(el)
     @bar = el.attributes['bar']
     @bat = Bat.new()
     @bat.from_xml(XPath.first(el, "./bat")
  end
 etc...  
Run Code Online (Sandbox Code Playgroud)

我不介意明确地创建对象结构; 这是我确信可以通过一些更高级别的编程来处理的序列化......


我不是试图为每个类保存一行或两行(通过将from_xml行为移动到初始化器或类方法等).我正在寻找复制我心理过程的"元"解决方案:

"我知道每个元素都将成为一个类名.我知道每个XML属性都是一个字段名.我知道要分配的代码只是@#{attribute_name} = el.[#{attribute_name}然后递归到子元素.然后反转到to_xml."


我同意建议"构建器"类加上XmlSimple似乎是正确的路径.XML - >哈希 - >? - >对象模型(和利润!)


更新2008-09-18 AM:来自@ Roman,@ fatgeekuk和@ScottKoon的优秀建议似乎打破了问题.我下载了HPricot源码,看看它是如何解决问题的; 关键方法显然是instance_variable_set和class_eval.irb工作非常鼓舞人心,现在正朝着实施方向迈进......非常激动

ruby xml serialization metaprogramming xml-serialization

7
推荐指数
1
解决办法
2297
查看次数

如何使用boost :: mpl来编写策略?

我使用类似下面的内容为我的应用程序编写策略:

策略类如下所示:

struct Policy {
  static void init();
  static void cleanup();
  //...
};

template <class CarT, class CdrT>
struct Cons {
  static void init() {
    CarT::init();
    CdrT::init();
  }
  static void cleanup() {
    CdrT::cleanup();
    CarT::cleanup();
  }
  //...
};
Run Code Online (Sandbox Code Playgroud)

撰写政策:

typedef Cons<Policy1, Cons<Policy2, Cons<Policy3, Policy4> > > MyPolicy;
Run Code Online (Sandbox Code Playgroud)

要使用MyPolicy:

init_with<MyPolicy>(...);
//...
cleanup_with<MyPolicy>(...);
Run Code Online (Sandbox Code Playgroud)

他们打电话的地方:

MyPolicy::init_options(); // calls Policy1 to 4's init in order
Run Code Online (Sandbox Code Playgroud)

MyPolicy::cleanup(); // calls Policy1 to 4's cleanup in reverse order
Run Code Online (Sandbox Code Playgroud)

从本质上讲,Cons在这里构造一个类型列表.这很直接.然而,typedef cons line有点难看.拥有可以执行此操作的策略组合器是理想的:

typedef CombinePolicy<Policy1, Policy2, Policy3, Policy4> MyPolicy; …
Run Code Online (Sandbox Code Playgroud)

c++ templates metaprogramming boost-mpl

6
推荐指数
2
解决办法
2239
查看次数