小编JDR*_*JDR的帖子

了解编译器如何解析指向函数的指针

以下代码段:

#include <iostream>

void does() { std::cout << "do" << std::endl; }
void does(bool b = false) { std::cout << "do(bool)" << std::endl; }

void fwd(void (*func)(bool))
{
    func(false);
}

int main(int, char**)
{
    fwd(&does);
    fwd(does);
    fwd(*does);
}
Run Code Online (Sandbox Code Playgroud)

可以理解地产生以下错误:

test.cpp:15:10: error: overloaded function with no contextual type information

编译器无法识别我打算使用哪些函数.我不明白的是当我注释掉以下行时代码将正确运行的原因:

fwd(*does)

为什么编译器会突然解决模糊性?

int main(int, char**)
{
    fwd(&does);
    fwd(does);
}
Run Code Online (Sandbox Code Playgroud)

此外,没有重载does,代码片段将正确运行所有3个调用.这个片段运行良好......

#include <iostream>

void does(bool b = false) { std::cout << "do(bool)" << std::endl; }

void fwd(void (*func)(bool))
{
    func(false); …
Run Code Online (Sandbox Code Playgroud)

c++ function-pointers function

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

Django,Python和类变量

我在拿起Django的同时学习Python.我熟悉许多其他语言.

在下面的代码片段中,x是类的类变量Foo.

class Foo(object):
    x = 9000
Run Code Online (Sandbox Code Playgroud)

鉴于之前的声明,以下工作正常.

print Foo.x

Django框架允许您通过定义Python类来创建模型.它使用Python类中的不同类变量创建字段.

class Question(models.Model):
    question_text = models.CharField(max_length=200)
Run Code Online (Sandbox Code Playgroud)

为什么以下代码段:

#!/usr/bin/env
import os, django
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
django.setup()
from polls.models import Question, Choice
print Question.question_text
Run Code Online (Sandbox Code Playgroud)

抛出以下错误:

AttributeError: type object 'Question' has no attribute 'question_text'
Run Code Online (Sandbox Code Playgroud)

据我所知,我的Question类有一个静态成员定义:Question.question_text.

python django

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

无法使用 boost asio TCP 套接字解释较差的带宽性能

下面是我写的一个简单的 TCP 服务器和匹配客户端的例子,开始练习 boost 的 asio 库,Example TCP Client/Server

  • 客户端只是从内存缓冲区中尽可能快地连接和发送数据。
  • 服务器仅侦听消息并打印它从完整消息中获得的字节数。

就是这样——仅此而已。Booth 示例在几个线程上运行,大部分使用默认设置,没有可能会丢掉东西的随意放置的睡眠......它们真的很容易理解,除了直接调用以提高目标之外几乎没有别的隔离问题。

问题是,客户端的输出如下:

Mbytes/sec: 51.648908, Gbytes/sec: 0.051649, Mbits/sec: 413.191267, Gbits/sec: 0.413191

笔记:

  • 我现在正在用电池供电运行我的笔记本电脑。如果我将它插入电源插孔,它会跳到 ~0.7 Gbits/sec。
  • 我尝试将 2048 字节的小消息发送到当前的 8 兆字节消息。
  • 我试过启用和禁用 nagle 算法。
  • 我试过调整发送和接收操作系统缓冲区的大小。
  • 所有这些都通过环回运行,127.0.0.1.
  • 通过 Wireshark 监控环回显示相同的低带宽使用率。

促使我写这个问题的实际点是这个。所述的iperf工具能够实现33.0比特/秒使用TCP经由本地主机。

$ iperf --client 127.0.0.1
------------------------------------------------------------
Client connecting to 127.0.0.1, TCP port 5001
TCP window size: 2.50 MByte (default)
------------------------------------------------------------
[  3] local 127.0.0.1 port 41952 connected with 127.0.0.1 port 5001
[ ID] …
Run Code Online (Sandbox Code Playgroud)

c++ networking tcp boost-asio

3
推荐指数
1
解决办法
2998
查看次数