请考虑以下代码:
#include <vector>
struct A
{
explicit A(int i_) : i(i_) {}
int i;
};
int main()
{
std::vector<int> ints;
std::vector<A> As(ints.begin(), ints.end());
}
Run Code Online (Sandbox Code Playgroud)
上面应该编译吗?由于构造函数被标记,我的感觉是它不应该explicit.
Microsoft Visual C++同意,给出一个明确的错误消息: cannot convert from 'int' to 'const A'; Constructor for struct 'A' is declared 'explicit'
但是,使用Comeau的在线编译器,代码编译成功.
哪个是对的?
编辑:
有趣的是,更改vector为set(在添加operator <到A之后)会导致两个编译器都出错.
然而,改变vector<int>以map<int, int>及vector<A>对map<A, A>原因两种编译器接受代码!
我认为有两种不同类型的日志记录:
我目前正在计划如何将第二种类型的日志记录合并到我们的应用程序中,以便我们能够记录用户报告问题时出现的问题.我已经看过几个关于这些痕迹应该如何详细和可用框架的讨论,但在这里我正在寻找一些更一般的指导方针.
我的具体问题包括:
我希望你能帮我解决这些问题.我也非常感谢您对此主题的任何其他建议.
这个问题的答案让我开始考虑使用"Windows事件跟踪"来满足我们的跟踪需求.我遇到过NTrace,这似乎是从C#代码生成ETW事件的好方法(使用与XP兼容的"经典提供者"模型).
但是,我无法找到一种简单的方法来使用这些事件 - 实时查看它们和/或将它们记录到文件中.我找到的唯一方法是在NTrace文档中描述:使用仅作为Windows DDK的一部分提供的工具.
在现场复杂问题的情况下,我们可能需要让用户生成包含跟踪的文件.我们不能要求用户下载DDK或执行一些复杂的操作才能执行此操作.
是否有一种直接,用户友好的方式将ETW事件记录到文件中?
此外,如果某人没有以管理员身份运行,是否可以在Windows Vista/7上使用ETW事件?
我目前正在用Python编写命令行应用程序,需要以最易于下载和运行的方式向最终用户提供.对于那些可能没有安装Python(2.7)的Windows用户,我打算使用PyInstaller来生成一个独立的Windows可执行文件.然后用户可以简单地下载"myapp.exe"并运行myapp.exe [ARGUMENTS].
我还想为已安装Python的用户(在各种平台上)提供(较小的)下载.一种选择是将我的所有代码放入单个.py文件"myapp.py"(以...开头#! /usr/bin/env python),并使其可用.这可以下载,然后使用myapp.py [ARGUMENTS]或运行python myapp.py [ARGUMENTS].但是,将我的应用程序限制为单个.py文件有几个缺点,包括限制我组织代码的能力以及难以使用第三方依赖项.
相反,我想分发我自己的代码的几个文件的内容,以及一些(纯Python)依赖项.是否有任何工具可以将所有这些打包成一个文件,可以使用现有的Python安装轻松下载和运行?
编辑:请注意,我需要这些应用程序以便最终用户运行.它们不太可能已经pip安装,也没有其他任何超出Python核心的东西.使用PyInstaller,我可以生成一个文件,这些用户可以从Web下载并使用一个命令运行(或者,如果没有参数,只需双击).有没有办法在不使用PyInstaller的情况下实现这种易用性(即没有冗余地捆绑Python运行时)?
在诸如C和C++之类的语言中,通常在其调用者之上定义被调用函数,以避免需要前向声明.例如:
void g() { ... }
void f() { g(); ... }
int main() { f(); ... }
Run Code Online (Sandbox Code Playgroud)
在Python中,如果
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
idiom用在源文件的末尾,前向声明是不必要的,函数的顺序无关紧要.
Python源文件中的函数顺序是否有任何约定?调用函数仍然通常写在调用者之上,反之亦然?
编辑:答案是关于功能顺序没有约定(例如,PEP 8中没有任何内容).甚至标准库中的模块也不一致.
在使用异常信号错误的语言中,我想调用一些第三方代码,如果失败,则运行后备代码.例如:
try:
result = third_party.fast_calculation()
catch:
result = slower_calculation()
Run Code Online (Sandbox Code Playgroud)
根据我的经验,很少知道第三方代码可能抛出的所有异常.因此,我不能在catch条款中列出这些例外情况.另一方面,我经常被告知不要catch每一个可能的例外.
catch在这种情况下我该如何写条款?
我有一个o原型对象p:
var p = {}
var o = Object.create(p)
Run Code Online (Sandbox Code Playgroud)
可以向a对象添加属性o,然后向原型添加同名的setter p:
o.a = 1
Object.defineProperty(p, 'a', {set: function(value) {}});
console.log(o.a); // 1
Run Code Online (Sandbox Code Playgroud)
但是,如果我们尝试在setter 之后添加属性,则不会将其添加到o- 而是调用setter:
Object.defineProperty(p, 'a', {set: function(value) {}});
o.a = 1
console.log(o.a); // undefined
Run Code Online (Sandbox Code Playgroud)
是否可以先定义setter,然后绕过它以a直接添加属性o?
我只想返回 Windows 任务管理器中“应用程序”类别下列出的那些应用程序,而不是所有正在运行的进程。下面的脚本返回我不想要的所有进程。如何根据我的要求修改此代码?
import subprocess
cmd = 'WMIC PROCESS get Caption,Commandline,Processid'
proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
for line in proc.stdout:
print(line)
Run Code Online (Sandbox Code Playgroud) 以下代码按预期打印警告:
>>> import warnings
>>> def f():
... warnings.warn('Deprecated', DeprecationWarning)
... print('In function f()')
...
>>> f()
__main__:2: DeprecationWarning: Deprecated
In function f()
Run Code Online (Sandbox Code Playgroud)
但是,使用时eval,不会出现警告消息:
>>> eval('f()')
In function f()
Run Code Online (Sandbox Code Playgroud)
为什么在这两种情况下警告的行为有所不同?
我在用户界面中使用WPF和MVVM模式.在我的ViewModel中,我有一个List,其中包含以毫米为单位的距离,我通过将ListView.ItemsSource绑定到List来显示在ListView中.但是,我希望显示的值使用更自然的单位 - 米或英尺,具体取决于"公制"复选框的状态.
我写了几个简单的类,MillimetresToMetresConverter和MillimetresToFeetConverter,它们都实现了IValueConverter.虽然我可以将我的数据绑定上的Converter属性设置为一个或另一个,但我不确定当复选框的状态发生变化时如何在这些转换器之间进行更改.
我的计划是在我的ViewModel上有一个字段"IValueConverter lengthConverter",我可以设置为一个转换器或另一个,然后在我的XAML中...="{Binding Converter={Binding Path=lengthConverter}}"- 遗憾的是这不起作用,因为Converter不是依赖属性.
如何在运行时更改数据绑定使用的转换器?
python ×4
windows ×3
logging ×2
trace ×2
c++ ×1
coding-style ×1
constructor ×1
data-binding ×1
etw ×1
eval ×1
exception ×1
explicit ×1
iterator ×1
javascript ×1
mvvm ×1
packaging ×1
prototype ×1
robustness ×1
subprocess ×1
warnings ×1
wpf ×1