小编New*_*biZ的帖子

重载全局类型转换运算符

为了测试和显示我的库的某些功能的结果,我正在创建一组方便的功能.

我有一个execute看起来像这样的函数:

template <typename R, typename I>
std::string execute( const std::string& func_name, R(*func_ptr)( const I& ), const I& func_input );
Run Code Online (Sandbox Code Playgroud)

它调用该函数,并在我可以发送到的格式化字符串中显示结果和参数std::cout.

问题是我的一些函数没有返回convertible-to-string结果.我以为我可以简单地用以下内容重载全局::operator std::string:

template <typename T>
operator std::string( const std::vector<T>& v );
Run Code Online (Sandbox Code Playgroud)

但海湾合作委员会抱怨说:

error: 'operator std::string(const std::vector<T, std::allocator<_CharT> >&)' must be a nonstatic member function
Run Code Online (Sandbox Code Playgroud)

好吧,问题当然是我不能添加成员操作符std::vector,甚至对于我的类,我不想用"for testing"转换操作符来污染它们.

我想我可以添加一个间接层并使用函数而不是转换运算符,但这不是更美观的解决方案.我也可以过载::operator <<std::ostream和使用std::ostringstream,但也并非干净的解决方案.

我想知道全局转换运算符是否真的不能超载,如果是,为什么呢.

c++ operator-overloading operators

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

了解Jupyter笔记本流程

我管理着一组机器,用户可以在其中运行jupyter笔记本。用户经常忘记检查自己的内存消耗,关闭旧笔记本电脑等。因此,我经常不得不检查自己是谁在消耗所有内存或CPU。

Jupyter很难做到这一点。我不明白为什么对于看起来像单个内核的似乎有如此多的进程正在运行。例如,这是我在中看到的东西ps

someuser     66865  0.0  0.3 17415896 6679588 ?    S    07:12   0:00 /home/someuser/research/bin/python3 -m ipykernel_launcher -f /run/user/3007/jupyter/kernel-a6a6d1ce-397a-484e-85fe-64cd8c8c8a57.json
someuser     66866  0.0  0.3 17407700 6679452 ?    S    07:12   0:00 /home/someuser/research/bin/python3 -m ipykernel_launcher -f /run/user/3007/jupyter/kernel-a6a6d1ce-397a-484e-85fe-64cd8c8c8a57.json
someuser     66867  0.0  0.3 17407700 6679452 ?    S    07:12   0:00 /home/someuser/research/bin/python3 -m ipykernel_launcher -f /run/user/3007/jupyter/kernel-a6a6d1ce-397a-484e-85fe-64cd8c8c8a57.json
someuser     66868  0.0  0.3 17407700 6679472 ?    S    07:12   0:00 /home/someuser/research/bin/python3 -m ipykernel_launcher -f /run/user/3007/jupyter/kernel-a6a6d1ce-397a-484e-85fe-64cd8c8c8a57.json
someuser     66869  0.0  0.3 17407700 6679472 ?    S    07:12   0:00 /home/someuser/research/bin/python3 -m ipykernel_launcher -f /run/user/3007/jupyter/kernel-a6a6d1ce-397a-484e-85fe-64cd8c8c8a57.json
someuser …
Run Code Online (Sandbox Code Playgroud)

jupyter-notebook

7
推荐指数
0
解决办法
262
查看次数

Objective-C内置模板系统?

我正在开发一个iPhone应用程序,我使用HTML来显示格式化的文本.

我经常显示相同的网页,但内容不同.我想使用模板HTML文件,然后用我的不同值填充它.

我想知道Objective-C是否有类似于Ruby中的ERB的模板系统.

这样就可以做到这样的事情

模板:

<HTML>
  <HEAD>
  </HEAD>
  <BODY>
    <H1>{{{title}}}</H1>
    <P>{{{content}}}</P>
  </BODY>
</HTML>
Run Code Online (Sandbox Code Playgroud)

Objective-C(或者它可能在理想世界中)

Template* template = [[Template alloc] initWithFile:@"my_template.tpl"];
[template fillMarker:@"title" withContent:@"My Title"];
[template fillMarker:@"content" withContent:@"My text here"];
[template process];
NSString* result = [template result];
[template release];
Run Code Online (Sandbox Code Playgroud)

结果字符串将包含:

<HTML>
  <HEAD>
  </HEAD>
  <BODY>
    <H1>My Title</H1>
    <P>My text here</P>
  </BODY>
</HTML>
Run Code Online (Sandbox Code Playgroud)

上面的例子可以通过一些文本替换来实现,但这将是一个难以维护.我还需要像模板中的循环一样的东西.例如,如果我要显示多个项目,我想生成多个div.

谢谢阅读 :)

templates file objective-c

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

QStyledItemDelegate - updateEditorGeometry如何工作?

我正在使用Qt 4.7.

我有一个模型,我QTableView在两列中显示,我的目标是在我的中提供该模型的内联编辑QTableView.

+-----------------+----------------+
|  Axis position  |  Axis range    |
+-----------------+----------------+
|      Left       | Fixed [0,1]    |
|      Left       | Source: SRC1   |
|      Right      | Source: SRC2   |
|      Left       | Fixed [5,10]   |
+-----------------+----------------+
Run Code Online (Sandbox Code Playgroud)

第一列是可编辑的,使用简单的QComboxBox方法在右和左之间切换,它可以很好地工作.问题出在我的第二列,可以使用自定义小部件进行编辑.

这个小部件很简单,它描述了一个范围.所以有一个QComboBox来选择范围的类型("固定":值由用户给出,"源":该值是从源的最小值/最大值动态调整的).

这是我的自定义小部件的源代码:

class RangeEditor : public QWidget
{
  Q_OBJECT

public:
  RangeEditor( ... );
  ~RangeEditor();

public:
  CurveView::ConfigAxes::Range range  () const;
  QVariant                     minimum() const;
  QVariant                     maximum() const;
  DataModel*                   model  () const;

  void range  ( CurveView::ConfigAxes::Range range );
  void …
Run Code Online (Sandbox Code Playgroud)

qt widget qwidget

5
推荐指数
1
解决办法
4004
查看次数

为什么iget()隐藏在xv6中

我正在玩xv6,这是Unix版本6的现代实现.

对于我的第一次破解,我想实现简单的getcwd系统调用,但我有点迷失了我应该使用哪种抽象级别.

  • 我应该使用struct file界面吗?
  • 或者可能是struct inode界面?
  • 重要的是,它似乎甚至可以纯粹在用户地区实施.

我开始用struct inode操作来实现它.我天真的想法是检索proc->cwd,然后readi()它的第二个条目(..),扫描它以检索我的前一个inum,依此类推,直到我击中根.

似乎不是很高效,但这适合第一次黑客攻击.

我的问题是,虽然我需要fs.c:iget()检索struct inodeinum的I中得到dirent秒.我注意到它iget()是静态的fs.c而且没有声明,defs.h这让我有点恼火,但我找不到原因.

所以,这是我的问题.为什么iget()故意隐藏在内核的其他部分?

pwd getcwd xv6

5
推荐指数
1
解决办法
470
查看次数

Python 3 asyncio 与 aioboto3 似乎是连续的

我正在将一个简单的 python 3 脚本移植到 AWS Lambda。该脚本很简单:它从十几个 S3 对象收集信息并返回结果。

该脚本用于multiprocessing.Pool并行收集所有文件。但由于缺少,multiprocessing因此无法在 AWS Lambda 环境中使用。/dev/shm所以我想与其写一个脏multiprocessing.Process/multiprocessing.Queue替换,不如尝试asyncio一下。

aioboto3我正在Python 3.8 上使用最新版本(8.0.5)。

我的问题是,我似乎无法在文件的天真顺序下载和异步事件循环复用下载之间获得任何改进。

这是我的代码的两个版本。

import sys
import asyncio
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor

import boto3
import aioboto3

BUCKET = 'some-bucket'
KEYS = [
    'some/key/1',
    [...]
    'some/key/10',
]

async def download_aio():
    """Concurrent download of all objects from S3"""
    async with aioboto3.client('s3') as s3:
        objects = [s3.get_object(Bucket=BUCKET, Key=k) for k in KEYS]
        objects = await asyncio.gather(*objects) …
Run Code Online (Sandbox Code Playgroud)

python amazon-web-services async-await python-asyncio

5
推荐指数
1
解决办法
6881
查看次数

在环回上重放 pcap

我有一组pcap包含来自两台主机的 UDP 流量的文件,并且必须定期对此流量执行一些分析。

理想情况下,我希望避免频繁设置具有特定 IP 的本地接口等来重播这些文件。我希望能够简单地在我的环回接口上重播它们,使用tcprewrite更改pcap.

这是它目前的样子:

# Remove mac addresses for loopback interface
# Remove VLAN tags
tcprewrite \
  --enet-smac=00:00:00:00:00:00 \
  --enet-dmac=00:00:00:00:00:00 \
  --enet-vlan=del \
  --infile="${INFILE}" \
  --outfile="${OUTFILE}.tmp"

# Change source and destination IP to loopback
# Regenerate IP checksums
tcprewrite \
  --srcipmap=0.0.0.0/0:127.0.0.1 \
  --dstipmap=0.0.0.0/0:127.0.0.1 \
  --fixcsum \
  --infile="${OUTFILE}.tmp" \
  --outfile="${OUTFILE}"
Run Code Online (Sandbox Code Playgroud)

看起来差不多可以工作了。然后我可以简单地使用我的环回重播这些文件,tcpreplay并且我看到数据包使用tcpdumpon lo。尽管如此,似乎任何常规用户空间套接字都看不到环回上的此流量。

据我了解,这似乎与Linux上环回接口处理第2层的方式有关。看来我需要将第 2 层标头 (DLT) 从普通协议重写ethernetnullBSD 环回使用的协议。

任何有将以太网上捕获的 UDP 流量重放到环回接口的经验的人将不胜感激。pcap我不知道如何使用/来实现这一点,或者是否可行 …

loopback tcpdump pcap tcpreplay

5
推荐指数
0
解决办法
1017
查看次数

STL算法和const_iterators

今天我写了一个小谓词来查找容器中的匹配符号.

但是我遇到了一个问题:我想在std::find_if一个类的const方法中调用这个谓词,在一个容器中搜索这个类的成员.

但我只是注意到既std::find不能std::find_if也不能操作const_iterators!

我检查了一些C++引用,似乎没有std::findstd::find_if接受/返回的版本const_iterators.我只是无法理解为什么,因为从我所看到的,这些算法无法修改迭代器引用的对象.

以下是std::findSGI实现中记录的内容:

返回[first,last]范围内的第一个迭代器i,使得*i == value.如果不存在这样的迭代器,则返回last.

c++ iterator stl const find

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

从streambuf派生而不重写相应的流

几天前,我决定编写一个streambuf使用mmap和预读的子类会很有趣.我看了一下我的STL(SGI)如何实现filebuf和实现basic_filebuf包含a FILE*.所以继承basic_filebuf是不可能的.

所以我继承了basic_streambuf.然后我想把我绑mmapbuf到一个fstream.

我认为我唯一需要做的就是复制filebuf...... 的隐式接口,但这是一个明显的错误.在SGI,basic_fstream拥有一个basic_filebuf.无论我是否打电话basic_filestream.std::::ios::rdbuf( streambuf* ),文件流都完全忽略它并使用它自己的filebuf.

所以现在我有点困惑......当然,我可以创建我自己的mmfstream,这将是确切的复制/粘贴,fstream但听起来真的不是面向DRY的.

我无法理解的是:为什么fstream这么紧密地耦合在一起filebuf,所以除了一个以外什么都不可能使用filebuf分离流和bufs的关键在于可以使用具有不同缓冲区的流.

解决方案:

=> filestream应该依赖于隐式接口filebuf.也就是说,fstream应该由streambuf类进行模板化.这将允许每个人提供自己的streambuf子类,fstream只要它实现了filebuf隐式接口.问题:我们无法添加模板参数,fstream因为它会在fstream用作模板模板参数时破坏模板选择器.

=> filebuf应该是一个没有任何附加属性的纯虚拟类.这样一个人就可以从中继承而不携带所有的FILE*垃圾.

你对这个问题的想法?

c++ fstream mmap stream streambuf

4
推荐指数
1
解决办法
2722
查看次数

包含彼此了解的字段的结构

我有一组需要相互了解才能合作的对象.这些对象存储在容器中.我试图对如何在Rust中构建我的代码有一个非常简单的想法.

让我们用一个类比.A Computer包含:

  • 1 Mmu
  • 1 Ram
  • 1 Processor

在Rust:

struct Computer {
    mmu: Mmu,
    ram: Ram,
    cpu: Cpu,
}
Run Code Online (Sandbox Code Playgroud)

对于任何可行的工作,Cpu需要了解Mmu它与之相关联,并且Mmu需要知道Ram它与之相关联.

希望Cpu通过值汇总Mmu.他们的生命不同:人们Mmu可以独立生活.碰巧我可以把它插上Cpu.然而,创建一个Cpu没有Mmu附加的东西是没有意义的,因为它无法完成它的工作.Mmu和之间存在相同的关系Ram.

因此:

  • A Ram可以独立生活.
  • Mmu需要Ram.
  • 一个Cpu需要的Mmu.

我如何在Rust中对这种设计进行建模,其中一个结构的字段彼此了解.

在C++中,它将遵循:

>

struct Ram
{
};

struct Mmu
{
  Ram& ram;
  Mmu(Ram& …
Run Code Online (Sandbox Code Playgroud)

rust

4
推荐指数
1
解决办法
621
查看次数

在函数指针之间转换

我目前正在使用Don Clugston的fastdelegates实现一个计时器/回调系统.(见http://www.codeproject.com/KB/cpp/FastDelegate.aspx)

这是起始代码:

struct TimerContext
{
};

void free_func( TimerContext* )
{
}

struct Foo
{
    void member_func( TimerContext* )
    {
    }
};

Foo f;
MulticastDelegate< void (TimerContext*) > delegate;

delegate += free_func;
delegate += bind( &Foo::member_func, &f );
Run Code Online (Sandbox Code Playgroud)

好的,但现在,我希望用户能够子类TimerContext存储并将自己的结构发送到回调.这里的目的是防止用户不得不低估TimerContext他自己

struct TimerContext
{
};

struct MyTimerContext : TimerContext
{
    int user_value;
};

void free_func( TimerContext* )
{
}

void free_func2( MyTimerContext* )
{
}

struct Foo
{
    void member_func( TimerContext* )
    {
    }

    void …
Run Code Online (Sandbox Code Playgroud)

c++ delegates function-pointers callback

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

ZMQ发布/子可靠/可扩展设计

我使用ZMQ设计了一个pub/sub架构.我需要最大的可靠性和可扩展性,并且在所提供的可能性方面有点迷失.

目前,我有一个由经纪人链接的出版商和订阅者.代理是一个简单的转发器设备,为发布者提供前端,为订阅者提供后端.

我需要在代理崩溃或断开连接时处理这种情况,并提高整体可伸缩性.

好吧,所以我想添加多个代理,发布者会循环代理发送消息,订阅者只会订阅所有这些代理.

然后我需要一种方法来检索可能的经纪人列表,所以我写了一个名称服务,按需提供经纪人列表.发布者和订阅者要求此服务连接到哪些经纪人.

我还写了一种"懒惰的海盗"(即尝试/重试一个接一个)可靠的名称服务,以防主要名称服务下降.

我开始认为我设计错了,因为代码库的大小和复杂性不断增加.我迷失在ZMQ提供的各种可能性的丛林中.

也许基于路由器/经销商的东西可以在这里使用?

任何建议非常感谢!

python publish-subscribe zeromq messagebroker

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

使用javax.sound.sampled生成声音

我正试图用Java生成声音.最后,我愿意不断向声卡发送声音,但是现在我可以发送一个独特的声波.

所以,我用一个代表简单正弦波的44100个有符号整数填充了一个数组,我想将它发送到我的声卡,但我无法让它工作.

int samples = 44100; // 44100 samples/s
int[] data = new int[samples];

// Generate all samples
for ( int i=0; i<samples; ++i )
{
  data[i] = (int) (Math.sin((double)i/(double)samples*2*Math.PI)*(Integer.MAX_VALUE/2));
}
Run Code Online (Sandbox Code Playgroud)

我使用以下方法将其发送到声音线:

AudioFormat format = new AudioFormat(Encoding.PCM_SIGNED, 44100, 16, 1, 1, 44100, false);

Clip clip = AudioSystem.getClip();
AudioInputStream inputStream = new AudioInputStream(ais,format,44100);
clip.open(inputStream);
clip.start(); 
Run Code Online (Sandbox Code Playgroud)

我的问题在于它们之间的代码片段.我只是找不到将我转换int[]为输入流的方法!

java audio

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