小编tim*_*kro的帖子

实现标记联合的移动构造函数

我使用包含匿名联合和标记的类实现了标记联合:

class LogFile
{
  public:
    LogFile(std::ostream& stdStream);
    LogFile(std::ofstream fileStream);
    LogFile(LogFile&& logFile);
    ~LogFile();

    std::ostream& getStream();

  private:
    enum { STD_STREAM, FILE_STREAM } streamType_;
    union
    {
        std::ostream *stdStream_;
        std::ofstream fileStream_;
    };
};
Run Code Online (Sandbox Code Playgroud)

我无法实现移动构造函数.在重载的"普通"构造函数中,我知道要初始化哪个union成员:

LogFile::LogFile(std::ofstream fileStream)
: streamType_(FILE_STREAM), fileStream_(std::move(fileStream))
{
}
Run Code Online (Sandbox Code Playgroud)

但是在移动构造函数中,我如何知道我必须初始化哪个stdStream_或哪个fileStream_.我无法检查streamType_初始化列表中的值.

c++ unions move-constructor c++11

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

如何在python中按下最后一个键?

首先,我想说,我知道有一个解决方案与诅咒.
我的程序是一个每秒运行的while循环.每一秒我都想得到最后一个被按下的按键.因此,如果你在循环睡眠时按下一个键我想要保存该键,这样我就可以获得最后按下的键,即使它不再被按下了.我不希望保存的密钥在获取后被"删除".因此,当用户按下"a"键时,我希望每秒钟一次,直到他按下另一个键.如果按下特定键我想打印文本.这篇文章我想用stdout的重定向写一个文件:

 ./test.py > file.txt
Run Code Online (Sandbox Code Playgroud)

用curses解决我的python程序看起来像这样:

import curses
from time import sleep

stdscr=curses.initscr()
stdscr.nodelay(1)
curses.noecho()
curses.cbreak()

while True:
    char=stdscr.getch()
    if char == 111:        #111 = "o" key
        print("test")
        break
    elif char == 97        #97 = "a" key

        #code that have to be run every second
        #if the a key is the last pressed key!

    sleep(1)

curses.nocbreak()
curses.echo()
curses.endwin()
Run Code Online (Sandbox Code Playgroud)

这个解决方案的问题是curses给了我疯狂的输出.我只按了一次"o"键,程序停止后,file.txt看起来像这样:

^[[?1049h^[[1;30r^[(B^[[m^[[4l^[[?7h^[[H^[[2Jtest
^[[30;1H^[[?1049l^M^[[?1l^[>
Run Code Online (Sandbox Code Playgroud)

但它应该是这样的:

test
Run Code Online (Sandbox Code Playgroud)

如果有人写回答,我会非常感激.我知道python不是使用keypress事件的程序的最佳选择.但我有理由为什么我使用python这个.

非常感谢您的答案.

python keyevent

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

将 io.BytesIO 对象传递给 gzip.GzipFile 并写入 GzipFile

我基本上想做的正是文档中的内容gzip.GzipFile

\n\n
\n

调用 GzipFile 对象\xe2\x80\x99s close() 方法不会关闭 fileobj,因为您可能希望在压缩数据后附加更多材料。这还允许您传递一个为写入而打开的 io.BytesIO 对象作为 fileobj,并使用 io.BytesIO object\xe2\x80\x99s getvalue() 方法检索结果内存缓冲区。

\n
\n\n

对于普通文件对象,它可以按预期工作。

\n\n
>>> import gzip\n>>> fileobj = open("test", "wb")\n>>> fileobj.writable()\nTrue\n>>> gzipfile = gzip.GzipFile(fileobj=fileobj)\n>>> gzipfile.writable()\nTrue\n
Run Code Online (Sandbox Code Playgroud)\n\n

gzip.GzipFile但在传递对象时我无法设法获取可写对象io.BytesIO

\n\n
>>> import io\n>>> bytesbuffer = io.BytesIO()\n>>> bytesbuffer.writable()\nTrue\n>>> gzipfile = gzip.GzipFile(fileobj=bytesbuffer)\n>>> gzipfile.writable()\nFalse\n
Run Code Online (Sandbox Code Playgroud)\n\n

我是否必须打开io.BytesIO显式内容才能进行写入?我该怎么做?或者返回的文件对象和 我没有想到的open(filename, "wb")返回的对象之间是否有区别?io.BytesIO()

\n

gzip bytesio python-3.x

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

Flask 如何在每个请求开始时启动一个新的 SQLAlchemy 事务?

我尝试使用此方法完全分离 Flask 和 SQLAlchemy ,但 Flask 似乎仍然能够检测我的数据库并在每个请求开始时启动一个新事务。

\n\n

db.py文件创建一个新会话并定义一个简单的表模型:

\n\n
from sqlalchemy import create_engine\nfrom sqlalchemy.orm import scoped_session, sessionmaker\nfrom sqlalchemy.ext.declarative import declarative_base\nfrom sqlalchemy import Column, String\n\n\nengine = create_engine("mysql://web:kingtezdu@localhost/web_unique")\n\nprint("creating new session")\ndb_session = scoped_session(sessionmaker(bind=engine))\n\nBase = declarative_base()\nBase.query = db_session.query_property()\n\n\n# define model of \'persons\' table\nclass Person(Base):\n    __tablename__ = "persons"\n    name = Column(String(30), primary_key=True)\n\n    def __repr__(self):\n        return "Person(\\"{0.name}\\")".format(self)\n\n# create table\nBase.metadata.create_all(bind=engine)\n
Run Code Online (Sandbox Code Playgroud)\n\n

并且app.py,一个使用 SQLAlchemy 会话和模型的简单 Flask 应用程序:

\n\n
from flask import Flask, escape\napp = Flask(__name__)\n\n\n# importing new session\nfrom db import db_session, …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy flask

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

将键映射到自身和另一个键,而不覆盖该键的先前映射

我正在编写一个插件,我需要检测用户何时使用密钥n来获取下一个搜索结果。

nmap n n:echo "detected!"<CR>
Run Code Online (Sandbox Code Playgroud)

不幸的是,这会覆盖用户定义的所有映射n,例如跳转到下一个搜索结果后以光标为中心。

nmap n nzz
Run Code Online (Sandbox Code Playgroud)

有没有办法映射n到用户映射到的任何内容n和我的echo命令?在此示例中,结果应等于:

nmap n nzz:echo "detected"<CR>
Run Code Online (Sandbox Code Playgroud)

vim

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

简单的硬编码算术是否被缓存/编译掉了?

我想知道python是否在其.pyc文件中缓存/编译简单的算术5*5+5.

有时我喜欢写if seconds > 24*60*60一天比如说.我知道对性能的影响是不明显的,但我很好奇.

python python-internals

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

在 Flask 对象上存储对象

我需要在我的flask.Flask实例上存储一个对象。天真的方法只是分配这样的属性。

app = flask.Flask(__name__)
app.my_object = MyObject()
Run Code Online (Sandbox Code Playgroud)

我打算稍后在这样的应用程序上下文中引用它:

flask.current_app.my_object
Run Code Online (Sandbox Code Playgroud)

我怀疑这种方法是线程保存的。Flask 是否鼓励这样做的正确方法?如果没有,您将如何安全地实施上述方法?

flask

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

"func2(func1 arg)","(func2.func1)arg"或"func2 $ func1 arg"?

我想知道你会选择哪个选项?

putStrLn (show randomNum)
putStrLn $ show randomNum
(putStrLn . show) randomNum
Run Code Online (Sandbox Code Playgroud)

所有选项在语法上都是正确的.

  • 括号确保show首先执行并且putStrLn只获得一个参数.

  • $运营商负责展会功能和randomNum和执行showrandomNum,所以putStrLn只得到一个说法.

  • .操作者取putStrLn功能,show功能和randomNum与第一执行showrandomNum,然后putStrLn对结果.

但是在这个例子中,更像是类似于orkell还是更有意义?

haskell

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