小编Ed *_*hne的帖子

std :: function作为自定义流操纵器

我正在尝试使用C++ 11功能来使自定义流操纵器更容易创建.我可以使用lambda函数作为操纵符,但不是std::function<ostream&(ostream&)>.

这是代码,归结为:

#include <iostream>
#include <functional>
using namespace std;

auto lambdaManip = [] (ostream& stream) -> ostream& {
    stream << "Hello world" << endl;
};
function<ostream& (ostream&)> functionManip = [] (ostream& stream) -> ostream& {
    stream << "Hello world" << endl;
};

int main (int argc, char** argv) {
    cout << lambdaManip;    // OK
    cout << functionManip;  // Compiler error
}
Run Code Online (Sandbox Code Playgroud)

第二个cout语句失败,并带有以下内容:

g++-4 src/Solve.cpp -c -g -std=c++0x -o src/Solve.o -I/home/ekrohne/minisat
src/Solve.cpp: In function 'int main(int, …
Run Code Online (Sandbox Code Playgroud)

c++ lambda iostream manipulators c++11

9
推荐指数
3
解决办法
1687
查看次数

将python WeakSet提供给列表构造函数是否安全?

问题安全遍历WeakKeyDictionary和WeakValueDictionary没把我放心,因为我所希望的,而它的老不够,它的价值再次询问,而不是评论。

假设我有一个MyHashable可哈希的类,并且我想构建一个WeakSet

obj1 = MyHashable()
obj2 = MyHashable()
obj3 = MyHashable()

obj2.cycle_sibling = obj3
obj3.cycle_sibling = obj2

ws = WeakSet([obj1, obj2, obj3])
Run Code Online (Sandbox Code Playgroud)

然后,我删除一些局部变量,并转换为列表,为以后的循环做准备:

del obj2
del obj3

list_remaining = list(ws)
Run Code Online (Sandbox Code Playgroud)

我举这个问题似乎声称这是蛮好的,但即使没有任何明确的for循环,我已不是已经冒着循环垃圾收集器的构造过程中踢list_remaining和更改集的大小?我希望这个问题非常罕见,以至于很难通过实验检测出来,但是一旦我的程序崩溃,它就会变成蓝色的月亮。

我什至不觉得那个帖子上的各种评论者是否真的同意了

for obj in list(ws):
    ...
Run Code Online (Sandbox Code Playgroud)

可以,但是他们似乎都以为list(ws)自己可以一直运行而不会崩溃,我什至不敢相信。list构造函数是否避免以某种方式使用迭代器,从而不关心集合大小的变化?是否可以在list构造函数期间不进行垃圾回收,因为它list是内置的?

就目前而言,我写我的代码,以破坏性pop的物品出来的WeakSet,从而完全避免迭代器。我不介意破坏性地这样做,因为在我的代码中,WeakSet无论如何我已经完成了。但是我不知道自己是否偏执。

python weak-references

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

标签 统计

c++ ×1

c++11 ×1

iostream ×1

lambda ×1

manipulators ×1

python ×1

weak-references ×1