我与实验MATLAB OOP,因为一开始我模仿我的C++的记录器类,我把我所有的字符串辅助函数在String类,以为这将是巨大的,能够做的事情一样a + b
,a == b
,a.find( b )
而不是strcat( a b )
,strcmp( a, b )
,检索的第一元件strfind( a, b )
,等
问题:减速
我把上面的东西用上,并立即注意到一个急剧减速.我做错了(这当然有可能,因为我有相当有限的MATLAB经验),还是MATLAB的OOP只是引入了很多开销?
我的测试用例
这是我为字符串做的简单测试,基本上只是附加一个字符串并再次删除附加部分:
classdef String < handle
....
properties
stringobj = '';
end
function o = plus( o, b )
o.stringobj = [ o.stringobj b ];
end
function n = Length( o )
n = length( o.stringobj );
end
function o = SetLength( o, n ) …
Run Code Online (Sandbox Code Playgroud) 我有几个属于一起的git存储库,以及简单的批处理/ bash文件来循环它们.我经常使用log命令循环它们以快速查看它们处于什么状态.这很好用,除了一件事:如果提交消息长于我的控制台宽(或有多行)的字符数,git显示该行,然后是一个换行符(END),我必须按q继续(我猜它通过更多或类似的东西管道输出).例:
> gitloop . "git log --decorate=short --pretty=oneline -n1"
18629ae238e9d5832cb3535ec88274173337a501 (HEAD, origin/master, master) short log
625fb891b9b0b8648459b07ace662ae3b7773c7f (HEAD, origin/master, origin/HEAD, master) short log
dc0838118266ba8570ea338c1faddfe8af0387bb (HEAD, origin/work, origin/master, work, master) oops loooooooooooooong log
-(END)
Run Code Online (Sandbox Code Playgroud)
这是相当不方便的,因为我必须按q几次,而我只想一次看到所有这些oneliner.
如何禁用此行为(最好还是保留此日志格式)?
我想使用ansible-playbook使用ps,dstat等命令快速监控一些主机.该ansible
命令本身完美的我想要做什么,比如我会使用:
ansible -m shell -a "ps -eo pcpu,user,args | sort -r -k1 | head -n5"
Run Code Online (Sandbox Code Playgroud)
它很好地打印每个主机的所有std输出,如下所示:
localhost | success | rc=0 >>
0.0 root /sbin/init
0.0 root [kthreadd]
0.0 root [ksoftirqd/0]
0.0 root [migration/0]
otherhost | success | rc=0 >>
0.0 root /sbin/init
0.0 root [kthreadd]
0.0 root [ksoftirqd/0]
0.0 root [migration/0]
Run Code Online (Sandbox Code Playgroud)
然而,这需要我为每个不太"安全"的任务保留一堆shell脚本,所以我把它放在一个剧本中:
---
-
hosts: all
gather_facts: no
tasks:
- shell: ps -eo pcpu,user,args | sort -r -k1 | head -n5
Run Code Online (Sandbox Code Playgroud)
并运行它-vv
,但输出baiscally显示字典内容和换行不打印,所以这导致一个不可读的混乱像这样:
changed: [localhost] => …
Run Code Online (Sandbox Code Playgroud) 在底部更新
问题1:如何为管理相当繁重的资源的类实现五条规则,但是您希望它按值传递,因为这极大地简化并美化了它的用法?或者甚至不需要所有五项规则?
在实践中,我开始使用3D成像,其中图像通常是128*128*128双倍.能够写这样的东西会让数学变得更容易:
Data a = MakeData();
Data c = 5 * a + ( 1 + MakeMoreData() ) / 3;
Run Code Online (Sandbox Code Playgroud)
问题2:使用复制省略/ RVO /移动语义的组合,编译器应该能够以最少的复制完成此操作,不是吗?
我试图找出如何做到这一点,所以我从基础开始; 假设一个对象实现了实现复制和赋值的传统方式:
class AnObject
{
public:
AnObject( size_t n = 0 ) :
n( n ),
a( new int[ n ] )
{}
AnObject( const AnObject& rh ) :
n( rh.n ),
a( new int[ rh.n ] )
{
std::copy( rh.a, rh.a + n, a );
}
AnObject& operator = ( …
Run Code Online (Sandbox Code Playgroud) 我曾经使用vs 2012一段时间没有任何问题,今天当我想打开我的c#项目时,我收到此错误消息:
This program has known compatibility issues
Visual Studio 2012 Express for Windows Desktop is incompatible with this version of Windows.
Run Code Online (Sandbox Code Playgroud)
当我单击运行程序时出现此错误:
'Microsoft.VisualStudio.Editor.Implementation.EditorPackage' package did not load correctly
Run Code Online (Sandbox Code Playgroud)
当我继续此错误消息时,另一个错误消息显示:Visual Studio已停止工作.我需要尽快让它工作,任何想法?
这是我目前用于我的svn项目的工作流程(我从不使用svn分支,有些项目也被其他人积极处理):
git svn fetch
可能需要数小时的初始值.还要创建一个"构建"分支.git clone srv://project.git, git checkout build
然后git update-refs ..., git svn fetch
恢复到svn存储库的链接git push build
服务器并在Hudson中为该分支触发构建git checkout master, git merge build, git svn dcommit, git push, git checkout build, git rebase master, git push build
输入svn externals.我已经在这里尝试了每个脚本,但所有脚本都失败了.我的外部设置如下:
/path/to/x x
/path/to/y/z y/z
/path/to/a/b.file a/b.file
Run Code Online (Sandbox Code Playgroud)
并且脚本执行诸如尝试/path/to/x
在文件系统的根目录中创建的内容git svn fetch /path/to/x
.单个文件似乎也会导致更多问题.(子问题1:这些脚本的svn:externals格式是为什么编写的?)
它似乎很难修改其中一个脚本来处理我的情况并复制我正确的目录结构,但后来我遇到了一个主要问题:如果我更改了x和y/z中的文件目录,我没有看到将其加入单个svn提交的方法,这是我开始首先使用git的原因之一.
因此,问题是:有没有办法可以复制上述工作流程,只使用某个svn存储库的某些部分,这样我就能在root中执行svn dcommit?我更喜欢一个可以在linux和windows上运行的现成解决方案.
编辑我很快就通过我找到的一个脚本入侵了它,并使它复制了svn externals的目录结构.我不能克隆单个文件,这里是输出:
git svn clone -r HEAD …
Run Code Online (Sandbox Code Playgroud) 我正在尝试在Visual Studio 2012中的C++项目中使用一些预构建步骤,但它们不会被调用(虽然我很确定Visual Studio 2010中的相同技术是正常的).命令行构建表现完全相同.
这是项目文件的结尾; 该文件是使用Visual Studio生成的,然后我刚刚添加了最后几行:
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<Target Name="BeforeBuild">
<Message Text="### BeforeBuild ###" />
</Target>
<Target Name="BeforeCompile">
<Message Text="### BeforeCompile ###" />
</Target>
<Target Name="AfterBuild">
<Message Text="### AfterBuild ###" />
</Target>
Run Code Online (Sandbox Code Playgroud)
这是输出:
Project "d:\temp\temp.vcxproj" on node 1 (default targets).
InitializeBuildStatus:
Creating "Debug\temp.unsuccessfulbuild" because "AlwaysCreate" was specified.
AfterBuild:
AfterBuild
FinalizeBuildStatus:
Deleting file "Debug\temp.unsuccessfulbuild".
Touching "Debug\temp.lastbuildstate".
Run Code Online (Sandbox Code Playgroud)
所以只考虑AfterBuild而忽略其他的.看看这个我在Microsoft.BuildSteps.targets中找到了这个PropertyGroup:
<BuildDependsOn>
_PrepareForBuild;
$(BuildSteps);
AfterBuild;
FinalizeBuildStatus;
</BuildDependsOn>
Run Code Online (Sandbox Code Playgroud)
难道这不也有BeforeBuild和BuildEvent目标吗?或者我的MSBuild安装有什么问题导致它使用此BuildSteps.targets文件而不是其他东西?
解
正如Alexey指出的那样,使用Before/AfterTarget提供了一个可用的解决方法.您只需要处理要使用的目标,但通过查看BuildSteps文件可以轻松实现.这似乎现在工作正常:
<Target Name="BeforeBuild" BeforeTargets="PrepareForBuild">
<Message Text="### BeforeBuild ###" />
</Target>
<Target Name="BeforeCompile" BeforeTargets="BuildCompile"> …
Run Code Online (Sandbox Code Playgroud) 我正在使用NetBeans来处理Subversion scm下的一些java项目.每当我编辑内容时,Netbeans(6.9.1)开始在左右边缘添加彩色线条.它与其他有色指标相结合,就像我能想到的任何东西一样,让我疯狂.我知道这几乎是圣诞节,但我不希望我的编辑反映这一点.
如何完全禁用此差异?
如何完全禁用所有着色/提示/ ...除了代码的语法着色?
我想对从命令行调用的msbuild项目以及项目中的MSBuild任务调用的项目有不同的详细程度.例如:
在my.proj里面:
<Target Name=Foo>
<MSBuild Projects="a.csproj;b.csproj;c.csproj"/>
</Target>
Run Code Online (Sandbox Code Playgroud)
在命令行上:
msbuild /v:d my.proj
Run Code Online (Sandbox Code Playgroud)
现在,当MSBuild任务构建.csproj文件时,它也会以详细的详细程度执行.但是我想以最小的冗长度来构建它.
我知道可以像这样手动调用msbuild:
<Target Name=Foo>
<Exec Command="msbuild /v:m a.csproj"/>
<Exec Command="msbuild /v:m b.csproj"/>
<Exec Command="msbuild /v:m c.csproj"/>
</Target>
Run Code Online (Sandbox Code Playgroud)
或在实践中
<Target Name=Foo>
<Exec Command="msbuild /v:m %(Projectlist.Identity)"/>
</Target>
Run Code Online (Sandbox Code Playgroud)
当然这很好用,但后来我再也无法获得BuildInParallel
交换机的功能了(我不认为有可能从命令行调用msbuild而没有它们包含在解决方案中的多个项目?)
更新
我选择了Ludwo:基本上创建了一个自定义记录器,它将两个ConsoleLogger作为成员保存.一个是在命令行传递的冗长,另一个是'minimal'.记录器注册所有事件并将其传递给其中一个记录器,具体取决于当前是否正在构建csproj文件.输出看起来与正常情况完全相同,只是它不包含csproj文件中的数千行.
假设我在名为one.cpp的文件中使用了名为DoThis(const char*abc)的函数.所以当我尝试从另一个源文件(two.cpp)中的另一个函数调用此函数时,我得到错误:错误LNK2001:未解析的外部符号(C++),即使我使用#include"one.h"会是什么我要解决这个问题吗?