小编Mir*_*ral的帖子

NHibernate中的全局查找对象引用

是否有可能在NHibernate管理的对象上执行全局反向查找?

具体来说,我有一个名为"Io"的持久化类.跨多个表有大量字段,可能包含该类型的对象.有没有办法(给定一个Io对象的特定实例),检索实际上引用该特定对象的对象列表(任何类型)?(如果能够识别哪些特定字段实际包含引用,则奖励点,但这并不重要.)

由于NHibernate映射定义了所有链接(并且底层数据库具有相应的外键链接),因此应该有一些方法来实现它.

想象一下这种结构:

class Io
{
  public int Id { get; set; }
  // other fields specific to the Io type
}

class ThingOne
{
  public int Id { get; set; }
  public Io SensorInput { get; set; }
  public Io SolenoidOutput { get; set; }
  // other stuff
}

class ThingTwo
{
  public int Id { get; set; }
  public Io SensorInput1 { get; set; }
  public Io SensorInput2 { get; set; }
  public SubThing Doohickey …
Run Code Online (Sandbox Code Playgroud)

c# nhibernate criteria

6
推荐指数
1
解决办法
641
查看次数

带有 CMake 和静态库 /Z7 标志的 Visual Studio

我正在尝试使用 Visual Studio 2017 和基于 CMake 的项目(以及默认的 Ninja 后端)构建静态库(特别是 Protobuf)。

我想/Z7在构建时传递编译器开关(或更准确地说,用 替换默认值/Zi/Z7,以便调试信息最终嵌入到.lib文件中,而不是创建单独的.pdb文件。

我对 CMake 一无所知(但我确实有一个工作构建)。我该怎么做呢?

最好,如果可能的话,仅使用对 VS 创建的CMakeSettings.json文件的更改,而不对上游CMakeLists.txt文件进行任何更改。

如果这是不可能的,那么某种方法来创建一个新CMakeLists.txt文件,该文件继承未修改的上游文件的所有内容,但覆盖此设置也会很好。

我当前的CMakeSettings.json文件指定了DebugRelWithDebInfo配置。

c++ cmake protocol-buffers visual-studio-2017

6
推荐指数
1
解决办法
2091
查看次数

arrayLists中的C#对象

我正在使用ArrayListC#,我想知道如何添加对象ArrayList然后从中检索值?

简而言之,如何添加,删除,编辑和读取ArrayList类的包含对象?

感谢所有的帮助!

c# arraylist object

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

XmlWriter 在 xml:space=preserve 时插入空格

鉴于此代码(C#,.NET 3.5 SP1):

var doc = new XmlDocument();
doc.LoadXml("<?xml version=\"1.0\"?><root>"
    + "<value xml:space=\"preserve\">"
    + "<item>content</item>"
    + "<item>content</item>"
    + "</value></root>");

var text = new StringWriter();
var settings = new XmlWriterSettings() { Indent = true, CloseOutput = true };
using (var writer = XmlWriter.Create(text, settings))
{
    doc.DocumentElement.WriteTo(writer);
}

var xml = text.GetStringBuilder().ToString();
Assert.AreEqual("<?xml version=\"1.0\" encoding=\"utf-16\"?>\r\n<root>\r\n"
    + "  <value xml:space=\"preserve\"><item>content</item>"
    + "<item>content</item></value>\r\n</root>", xml);
Run Code Online (Sandbox Code Playgroud)

断言失败是因为在元素XmlWriter周围插入换行符和缩进<item>,这似乎与xml:space="preserve"属性相矛盾。

我试图接受没有空格的输入(或只有重要的空格,并且已经加载到XmlDocument)并漂亮地打印它而不在标记为保留空格的元素内添加任何空格(出于显而易见的原因)。

这是一个错误还是我做错了什么?有没有更好的方法来实现我想要做的事情?

编辑:我可能应该补充一点,我必须在输出端使用XmlWriterwith Indent=true。在“真实”代码中,这是从我的代码外部传入的。

.net c# xml whitespace xmlwriter

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

脱离从 C# 开始的进程

我有一些现有的代码System.Diagnostics.Process.Start用于启动子进程。它还ProcessStartInfo.RedirectStandardOutput用于捕获该进程的输出流。这一切工作正常。

我还需要将它附加到一个作业对象。我也有执行此操作的代码,只要该过程尚未附加到作业,它就可以正常工作。

不幸的是,情况并非总是如此,因此我需要使用CREATE_BREAKAWAY_FROM_JOB标志创建进程。这就是我被困的地方。

在我看来,从这里开始有两种可能的方式:

  1. 以某种方式说服Process.Start通过那一面额外的小旗。
  2. 放弃Process课程,回到 raw CreateProcess,并(以某种方式)重做输出重定向。

我不太确定如何做其中任何一个,或者是否有一些中间立场也可能起作用。有没有其他人遇到过这个问题并有一些想法/代码?

.net c# winapi process redirectstandardoutput

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

是否可以转义 SVG 视窗?(或者如何在缩放/转换后的 SVG 上定位 HTML DIV?)

在本文档中:

html, body {
  height: 100%;
  margin: 0;
  padding: 0;
  overflow: hidden
}
#content {
  width: 100%;
  height: 100%
}
Run Code Online (Sandbox Code Playgroud)
<div id="content">
  <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="100%" height="90%" viewBox="0 0 1920 1080" preserveAspectRatio="xMidYMid meet">
    <rect style="fill:none;stroke:black" width="540" height="157" x="690" y="26"></rect>
    <text style="font-size:148px;text-align:center;text-anchor:middle;fill:black;stroke:none" x="960" y="145">Test</text>
    <text style="font-size:112px;text-align:center;text-anchor:middle;fill:black;stroke:none" x="960" y="340">Lorem ipsum etc etc</text>
    <foreignObject x="10" y="726" width="1901" height="347">
      <div xmlns="http://www.w3.org/1999/xhtml" style="width:99.6%;height:97.7%;border:4px solid blue">
        <p style="text-align:center">Hello World, from HTML inside SVG.</p>
      </div>
    </foreignObject>
  </svg>
  <div style="width:99%;border:4px solid blue">
    <p style="text-align:center">Hello World, from HTML outside …
Run Code Online (Sandbox Code Playgroud)

html svg viewbox

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

生成有关使用复制构造函数和赋值的警告

有没有办法让编译器(特别是 MSVC 2017,但其他也可能很有趣)在使用特定类的复制构造函数和复制赋值运算符的位置发出警告并且以一种可以在每个调用站点被显式抑制,即使是间接的)?

这个问题询问有关产生编译错误的问题,现在使用 C++11 删除的方法很容易,但我希望代码仍然可以编译,只是输出警告。

原因是我有一个类,目前在整个代码库中被大量复制。我不想阻止它被复制(其中一些是必要的),但我确实想检查每个位置以确定是否应该将其更改为移动或通过引用传递。

让编译器暂时将构造函数的使用标记为警告似乎是一个很好的方法。

我尝试添加这样的内容:

__declspec(deprecated) MyType(MyType const&) = default;
Run Code Online (Sandbox Code Playgroud)

但这是行不通的;显然= default胜过任何其他修饰符。

我做了同样的事情,但完全实现了该方法,这几乎有效 - 它在每个调用站点生成 C4996,我可以查看这些并更改它们或附加:

#pragma warning(suppress:4996)
Run Code Online (Sandbox Code Playgroud)

如果我很高兴这是必需的副本。(我最终计划删除这些以及构造函数的弃用——这只是跟踪我尚未处理的内容的内务处理。)

不幸的是,有些情况我无法通过这种方式抑制,例如:

std::vector<MyType> list;
list.push_back(type);
list.emplace_back(MyType{ type });
Run Code Online (Sandbox Code Playgroud)

这些行中的每一行都会引发警告(第一行是因为它是具有常规复制构造函数的类内的字段声明),但这里只能直接抑制第三行。前两个在该行代码中引发警告<vector>,并且似乎不受警告抑制(或禁用)的影响。

有什么方法可以解决这个问题,或者有其他方法可以做我想要的事情吗?

c++ copy-constructor suppress-warnings visual-c++ visual-studio-2017

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

为什么 git 在执行 rebase-merges rebase 时不会自动重新应用冲突解决方案?

(类似于这个问题,但有一些上下文和演示为什么rerere不是答案。)

对于给定的历史:

                /...o      origin/master
o...o...o...o...o...o...o  master
    \...o........../       topic
Run Code Online (Sandbox Code Playgroud)

我有一个主题分支,我已将其合并到 master 中,并进行了一次额外的提交。同时,上游有人对 origin/master 进行了另一次提交,所以我不能再按原样推送我的 master。

我想将我的 master 重新绑定到 origin/master 而不更改主题上的提交 SHA,并且不会丢失已经在 master 上执行的冲突解决方案。(这是迄今为止我想要保留合并提交的最常见情况,所以我很惊讶这显然如此困难。)

rerere启用,git rebase -p 几乎工程-在原来合并的任何冲突,它会记住我做了什么来解决这些问题并重新应用此(虽然它留下标记为冲突的,所以我必须要记住,纪念每一个的文件已经无需重新启动解决文件的冲突解决方案,这在 TortoiseGit 前端有点烦人)。但是,如果在合并提交中也修复了对文件的任何其他更改(例如,纯粹在合并中添加的行没有冲突,但由于其他地方的更改仍需要更正),这些都会丢失。

事情是这样的。在我对合并提交的(可能是有缺陷的)理解中,它们由两个(或更多)父项和一个唯一的变更集(用于存储冲突解决方案,以及在提交合并之前所做的任何其他更改或稍后修改为合并提交)组成。似乎rebase -p重新创建了合并提交,但完全丢弃了这个额外的变更集。

为什么它不重新应用原始合并提交中的变更集?这将使 rerere 变得多余并避免丢失这些额外的更改。如果需要人工确认,它可能会将受影响的文件标记为冲突,但在许多情况下,这种自动解决方案就完全足够了。

换句话说,标记上面的一些提交:

                /...N      origin/master
o...o...o...o...B...M...A  master
    \...T........../       topic

T - the commit on topic
B - the merge-base of origin/master and master
N - the new commit on origin/master
M - the merge between B and T
A …
Run Code Online (Sandbox Code Playgroud)

git git-merge git-rebase git-rerere

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

constexpr结构成员初始化

此代码编译:

struct Info
{
    constexpr Info(bool val) : counted(false), value(unsigned(val)) {}
    constexpr Info(unsigned val) : counted(true), value(val) {}

    bool counted;
    unsigned value;
};

constexpr const auto data = std::array{
    Info{true}, Info{42u}
};

struct Foo
{
    constexpr static inline const auto data = std::array{
        Info{true}, Info{42u}
    };
};
Run Code Online (Sandbox Code Playgroud)

此代码不会:

struct Foo
{
    struct Info
    {
        constexpr Info(bool val) : counted(false), value(unsigned(val)) {}
        constexpr Info(unsigned val) : counted(true), value(val) {}

        bool counted;
        unsigned value;
    };

    constexpr static inline const auto data = …
Run Code Online (Sandbox Code Playgroud)

c++ constexpr c++17

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

makefile 配方中的 Foreach 模板

给出以下 Makefile 片段:

TOOLS=foo bar

define TOOL_install
install -c $(1) $$(prefix)/bin/$(1)
endef

.PHONY: install
install: all
        $(foreach tool,$(TOOLS),$(eval $(call TOOL_install,$(tool))))
Run Code Online (Sandbox Code Playgroud)

为什么make install打印“对‘安装’无需执行任何操作。” 而不是执行 foreach 指定的命令?(foreach 之前有一个选项卡,我尝试在 TOOL_install 定义中放置一个选项卡;但没有帮助。)

根据make -p安装目标没有命令,这显然不符合预期。

在同一个 makefile 的其他地方,我成功地使用相同的技术来创建整个规则,包括命令配方;我怎样才能在现有规则内实现这项工作?

(如果我替换eval为,info那么它会打印我期望它运行的命令。)

在这个简单的情况下,我可以通过内联命令让它工作:

install: all
        @$(foreach tool,$(TOOLS),install -c $(tool) $(prefix)/bin/$(tool) ; )
Run Code Online (Sandbox Code Playgroud)

但我想知道如何让第一个表单按预期工作,以防我将来需要更复杂的东西。

linux foreach makefile gnu-make

3
推荐指数
2
解决办法
2万
查看次数