我正在实现一个像服务器一样的CORBA.每个类都有远程可调用方法和一个带有两个可能输入的调度方法,一个标识方法的字符串或一个整数,它将是表中方法的索引.字符串到相应整数的映射将由映射实现.
调用者将在第一次调用时发送字符串并使用响应返回整数,以便它只需在后续调用时发送整数.这只是一个小优化.可以根据需要由服务器对象动态分配整数.服务器类可以从具有重写的虚拟方法的另一个类派生.
什么是定义方法绑定和调度方法的简单通用方法?
编辑:方法具有相同的签名(没有重载).这些方法没有参数并返回一个布尔值.它们可以是静态的,虚拟的或非静态的,覆盖基类方法与否.绑定必须正确处理方法覆盖.
该字符串是类层次结构绑定.如果我们有由字符串"A.foo"标识的A :: foo(),并且类B继承A并覆盖方法A :: foo(),它仍将被标识为"A.foo",但是如果服务器是A对象,调度程序将调用A :: foo,如果它是B对象,则调用B :: foo.
编辑(6 apr):换句话说,我需要使用动态调度方法实现我自己的虚方法表(vftable),使用字符串键来标识要调用的方法.vftable应该在同一个类的对象之间共享,并且与多态性的行为一样(继承的方法覆盖).
编辑(28 apr):看下面我自己的答案和最后的编辑.
我没有找到一种简单的方法来获得当地时间和UTC时间之间的分钟数.
起初我打算使用,tzset()
但它不提供夏令时.根据手册页,如果日光节省有效,它只是一个不等于零的整数.虽然通常是一个小时,但在某些国家可能需要半小时.
我宁愿避免计算当前UTC返回的时间差gmtime()
和localtime()
.
更通用的解决方案将为我提供指定位置和正time_t值的信息,或至少在本地.
编辑1:用例是为https://github.com/chmike/timez获取正确的本地时间偏移量.顺便说一句,如果您认为libc函数操作时间还可以,请阅读https://rachelbythebay.com/w/2013/03/17/time/.
编辑2:迄今为止我用来计算UTC时间偏移的最佳和最简单的解决方案是
// Bogus: assumes DST is always one hour
tzset();
int offset = (int)(-timezone / 60 + (daylight ? 60 : 0));
Run Code Online (Sandbox Code Playgroud)
问题是确定实际的节省时间.
编辑3:受到@trenki答案的启发,我提出了以下解决方案.这是一个黑客,因为它mktime()
可以将输出gmtime()
视为本地时间.当DST更改在UTC时间和本地时间之间的时间跨度时,结果是不准确的.
#include <stdio.h>
#include <time.h>
int main()
{
time_t rawtime = time(NULL);
struct tm *ptm = gmtime(&rawtime);
// Request that mktime() looksup dst in timezone database
ptm->tm_isdst = -1;
time_t gmt …
Run Code Online (Sandbox Code Playgroud) 我们正在尝试在Linux上使用带有Qt 的MITK库.
不幸的是,MITK没有安装功能,它还依赖于ITK和VTK.所以我们最终得到分散在许多目录中的头文件.
我们想在环境变量中的include路径中指定要添加的目录列表,如下所示:INCPATH + = $ MITK_INCLUDE_PATH.但这似乎不起作用.
我们怎么能实现这个目标?有没有更好的办法?
我需要确定文件的字节大小.
编码语言是C++,代码应该适用于Linux,Windows和任何其他操作系统.这意味着使用标准的C或C++函数/类.
这种微不足道的需求显然不是一个微不足道的解决方案.
我有一个非常简单的python程序,使用如下所示的Flask.它通过弹出和注销来处理登录.问题是浏览器中的URL不会被重定向(url_for())调用更新.
@app.route('/')
def index():
if not 'username' in session:
# contains a button showing a login popup form with action set to '/login'
return render_template('welcome.html')
else:
# contains a logout button with a href to '/logout'
return render_template('webapp.html')
@app.route('/login', methods=['POST'])
def login():
session['username'] = request.form['username']
return redirect(url_for('index'))
@app.route('/logout')
def logout():
session.pop('username', None)
return redirect(url_for('index'))
Run Code Online (Sandbox Code Playgroud)
访问"/"时,会显示欢迎页面.当我单击按钮时,将显示登录弹出窗口,其表单操作将重定向到"/ login".这样可以调用并执行login()函数.重定向也是如此,但浏览器不会更新显示的网址.
因此,webapp页面显示为/ logon url.当我单击重新加载时,我收到一个错误,因为它尝试重新加载/登录,而它应该重新加载'/'重定向.
/ logout也是如此.当显示webapp页面并单击注销按钮时,将加载/ logout页面,该页面执行logout()函数并重定向到index.但是网址要么退出了.
如果我然后重新加载页面,它会成功,因为/ logout接受GET方法然后将url更新为/它本来应该是第一个位置.
我的印象是它是一个jQuery移动问题,但无法找出问题所在.从python和Flask的角度来看,它匹配我能找到的所有登录示例.
我正在尝试在我的一个模板中使用静态模板块标记,但是我得到了一个我不明白的例外.
这是模板代码:
<img src="{{STATIC_URL}}closed.png" alt="Closed message" />
<br/>
{% load static %}
<img src="{% get_static_prefix %}closed.png" %}" alt="Closed message"/>
<br/>
<img src="{% static "closed.png" %}" alt="Closed message"/>
Run Code Online (Sandbox Code Playgroud)
如果我注释掉最后一个,则第一个图像显示指令有效.当最后一个取消注释时,我得到一个例外:
无效的块标记:'static'
该代码基于此 django文档部分.
我在Python中有一些代码在sqlite DB中设置char(80)值.
该字符串是通过文本输入字段直接从用户获取的,并使用JSON结构中的POST方法发送回服务器.
在服务器端,我当前将字符串传递给调用SQL UPDATE操作的方法.
它有效,但我知道它根本不安全.
我希望客户端无论如何都是不安全的,因此任何保护都应放在服务器端.我可以做些什么来再次保护UPDATE操作SQL注入?
我正在寻找的是一个"引用"文本以便它不会混淆SQL解析器的函数.我希望这样的功能存在,但找不到它.
编辑: 这是我当前设置char字段名称标签的代码:
def setLabel( self, userId, refId, label ):
self._db.cursor().execute( """
UPDATE items SET label = ? WHERE userId IS ? AND refId IS ?""", ( label, userId, refId) )
self._db.commit()
Run Code Online (Sandbox Code Playgroud) 升级Go之后,如何确保使用新版本重新编译我的所有包$GOPATH/pkg
和二进制文件$GOPATH/bin
?
我希望任何升级错误都报告为警告,而不是导致操作中止的错误.
我正在编写一个备份脚本,我打算每晚在cronjob中执行.
该脚本将sys.stdout和sys.stderr设置为输出文件,以记录发生的情况.
要进行备份,请使用以下代码
cmd = 'rsync -av --del --stats --filter "- .thumbnails/" ' + \
'--filter "- *~" --filter "- *.iso" --filter "- lost+found/" ' + \
'--filter "- .cache/" --filter "- tmp/" --filter "- *.mp3" ' + \
'--filter "- *.log" ' + srcDir + ' ' + dstDir
print "Executing '"+cmd+"' ..."
try:
sys.stdout.flush()
sys.stderr.flush()
retcode = subprocess.call( cmd, stdin = sys.stdin, stdout = sys.stdout,
stderr=sys.stderr, shell=False )
if retcode < 0:
print >>sys.stderr, "Command was terminated by …
Run Code Online (Sandbox Code Playgroud) c ×2
c++ ×2
python ×2
binding ×1
django ×1
encryption ×1
file ×1
filesize ×1
flask ×1
flask-login ×1
go ×1
methods ×1
mitk ×1
offset ×1
portability ×1
python-2.7 ×1
qt-creator ×1
qt4 ×1
security ×1
signature ×1
sql ×1
time ×1
utc ×1