小编Mir*_*ral的帖子

如何缩放SVG图像以填充浏览器窗口?

这似乎应该很容易,但我只是没有得到什么.

我想创建一个包含单个SVG图像的HTML页面,该图像会自动缩放以适应浏览器窗口,无需任何滚动,同时保留其纵横比.

例如,目前我有一个1024x768的SVG图像; 如果浏览器视口是1980x1000,那么我希望图像显示为1333x1000(垂直填充,水平居中).如果浏览器是800x1000,那么我希望它以800x600显示(水平填充,垂直居中).

目前我的定义如下:

<body style="height: 100%">
  <div id="content" style="width: 100%; height: 100%">
    <svg xmlns="http://www.w3.org/2000/svg" version="1.1"
         width="100%" height="100%"
         viewBox="0 0 1024 768"
         preserveAspectRatio="xMidYMid meet">
      ...
    </svg>
  </div>
</body>
Run Code Online (Sandbox Code Playgroud)

然而,这是扩展到浏览器的整个宽度(对于宽而短的窗口)并产生垂直滚动,这不是我想要的.

我错过了什么?

xhtml layout scaling svg aspect-ratio

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

使用C++ 11类型特征来提供备用内联实现

在模板化代码中使用特征时,以下代码模式是否合理,其中两个替代实现始终可编译?

阅读代码似乎比做其他恶作剧有条件地编译更清楚(但也许我对那些恶作剧我不够熟悉).

template<typename T>
class X
{
    void do_something() noexcept(std::is_nothrow_copy_constructible<T>::value)
    {
        if (std::is_nothrow_copy_constructible<T>::value)
        {
            // some short code that assumes T's copy constructor won't throw
        }
        else
        {
            // some longer code with try/catch blocks and more complexity
        }
    }

    // many other methods
};
Run Code Online (Sandbox Code Playgroud)

(增加的复杂性部分是为了提供强有力的异常保证.)

我知道这段代码会起作用,但是期望编译器消除常量假分支并为noexcept情况做内联等(比其他情况简单得多)是否合理?我希望在noexcept情况下能够像只用第一个块作为主体来编写方法一样有效(反之亦然,尽管我不太担心复杂的情况).

如果这不是正确的方法,有人可以请教我推荐的语法吗?

c++ templates exception-handling type-traits c++11

28
推荐指数
4
解决办法
2050
查看次数

Windows窗体中的加载与显示事件

希望我只是遗漏了一些明显的东西,但我试图了解Windows窗体中 Load和Shown事件之间的差异.

传统上,我只使用Load(或实际上是OnLoad,因为我认为覆盖一个方法比依靠设计者自己连接一个事件更干净),因为在所有版本的.NET中都可以使用它.使用.NET 2.0,引入了Shown事件.

现在,如果你在MSDN文档中查看这些描述("加载:第一次显示表单之前发生.","显示:每当表单首次显示时发生.")听起来像Load事件应该发生,然后表格应该可见,然后应该发生显示事件; 两者的结合使您可以在表格可见之前和之后执行某些任务.有道理,对吗?

但是,实验表明Shown事件总是发生 Load事件之前,每当我尝试它时(两者都发生在表单变得可见之前).然而,当我发现一个关于这些事件被触发的命令的页面时,我在谷歌周围时,他们总是列出首先被触发的Load事件.

我只是疯了,还是我错过了什么?(如果它们确实在大约同一时间发生,那么为什么首先添加了已显示的事件?)

(我目前在显示表单之前和之后做某事的解决方案是使用OnLoad进行"显示之前"的操作并为"显示后"的东西启动一个短时间的一次性计时器.哪个工作正常且可靠,但是它有点难看,我希望有一个更清洁的解决方案.但看起来显示的事件不是它.)

.net events .net-2.0 winforms

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

为什么枚举值的initializer_list不被视为常量表达式?

在以下代码中(在本地和Wandbox上测试):

#include <iostream>

enum Types
{
    A, B, C, D
};

void print(std::initializer_list<Types> types)
{
    for (auto type : types)
    {
        std::cout << type << std::endl;
    }
}

int main()
{
    constexpr auto const group1 = { A, D };
    print(group1);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

MSVC 15.8.5无法编译:

error C2131: expression did not evaluate to a constant
note: failure was caused by a read of a variable outside its lifetime
note: see usage of '$S1'
Run Code Online (Sandbox Code Playgroud)

(均指含有的行constexpr)

Clang 8(HEAD)报道:

error: constexpr …
Run Code Online (Sandbox Code Playgroud)

c++ language-lawyer constexpr c++17

15
推荐指数
2
解决办法
809
查看次数

WPF中的窗口所有者没有始终在线的行为

是否可以在Window.Owner不获取所有功能的情况下获得某些功能?

有两个窗口,窗口A和窗口B.我想这样做,以便选择任何一个将使它们在其他应用程序之上,但任何一个可以覆盖另一个.(实际上,不仅仅是两个,但它们都应该表现得相似.)

如果我将窗口B设置Owner为A,那么切换到任一窗口都会将两者都放在其他应用程序(我想要的)之前,但也会强制B始终位于A之上(我不想要).

我实际上已经有了独立于Owner/ 跟踪窗口层次结构的代码OwnedWindows,所以我可以扩展它以解决激活问题.因此,如果这简化了问题,我正在寻找的另一个答案是:

我如何实际做"当用户激活此窗口时,将一组特定窗口(应用程序中的所有其他窗口)带到我下面的Z顺序,同时保留它们相对于彼此的现有Z顺序" ?

.net wpf window owner z-order

12
推荐指数
1
解决办法
2499
查看次数

为什么C ++不允许条件运算符中的隐式列表初始化?

此代码编译:

std::string f(bool a, std::string const& b)
{
    if (a) return b;
    return {};
}
Run Code Online (Sandbox Code Playgroud)

该代码还可以编译:

std::string f(bool a, std::string const& b)
{
    return a ? b : std::string{};
}
Run Code Online (Sandbox Code Playgroud)

此代码无法编译:

std::string f(bool a, std::string const& b)
{
    return a ? b : {};
}
Run Code Online (Sandbox Code Playgroud)

假设?:运算符的两个结果值必须是同一类型,为什么它不像第一个示例中那样推断类型?


看来,这个问题可能有类似的答案,(基本上可以归结为“因为没有人想过写的语言规范时”)。但是,我仍然认为保留该问题很有用,因为问题本身是不同的,这仍然足够令人惊讶,并且其他人不会在搜索此问题时出现。

c++ conditional-operator language-lawyer c++11 list-initialization

12
推荐指数
1
解决办法
351
查看次数

Const和非const仿函数

这似乎应该经常被问及回答,但我的搜索功能让我失望了.

我正在编写一个函数,我想接受某种通用的可调用对象(包括裸函数,手动仿函数对象bind,或std::function),然后在算法深度(即lambda)中调用它.

该函数目前声明如下:

template<typename T, typename F>
size_t do_something(const T& a, const F& f)
{
   T internal_value(a);
   // do some complicated things
   // loop {
   //   loop {
       f(static_cast<const T&>(internal_value), other_stuff);
       // do some more things
   //   }
   // }
   return 42;
}
Run Code Online (Sandbox Code Playgroud)

我通过引用接受仿函数,因为我想保证它不会在函数入口时被复制,因此实际调用了对象的相同实例.它是一个const引用,因为这是接受临时对象的唯一方法(这在使用手动仿函数时很常见bind).

但是这需要将functor实现operator()为const.我不想要那个; 我希望它能够接受两者.

我知道我可以声明这个方法的两个副本,一个接受它作为const,一个接受非const,以便涵盖这两种情况.但是我不想这样做,因为注释隐藏了很多我不想复制的代码(包括一些循环结构,所以我不能在不移动问题的情况下将它们提取到辅助方法) .

我也知道const_cast在调用它之前我可能会欺骗和非const的仿函数,但这感觉有潜在危险(特别是如果函子故意实现const和非const调用操作符,则会调用错误的方法).

我已经考虑过接受函子作为std::function/ boost::function,但这对于应该是一个简单的问题来说是一个重要的解决方案.(特别是在仿函数不做任何事情的情况下.)

有没有"正确"的方法来满足这些要求而不是复制算法?

[注意:我更喜欢不需要C++ 11的解决方案,尽管我也对C++ 11的答案感兴趣,因为我在两种语言的项目中都使用类似的结构.

c++ const functor function-object

8
推荐指数
1
解决办法
1504
查看次数

模板元代码和私有成员

我想做这样的事情:

template <typename T>
class Foo
{
...
public:
    void DoSomething()
    {
        compile_time_if (T is ClassA)
        {
            m_T.DoThingOne();
            m_T.DoThingTwo();
        }
        DoSomeFooPrivateThing();
        m_T.DoThingThree();
    }
    T m_T;
};
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我知道所有有效的T工具DoThingThree,但只有ClassA实现DoThingOneDoThingTwo.这不是一个鸭子类型的东西,我只想做这个额外的部分ClassA,我不想将这些方法添加到其他可能的Ts.我不能做转换,因为可能的Ts不是继承类型.

我知道我可以使用外部帮助器模板来满足这个要求:

template <typename T>
void Foo_DoSomething(T& t)
{
    t.DoThingThree();
}

template <>
void Foo_DoSomething(ClassA& t)
{
    t.DoThingOne();
    t.DoThingTwo();
    t.DoThingThree();
}

template <typename T>
class Foo
{
...
public:
    void DoSomething()
    {
        Foo_DoSomething(m_T);
    }
...
};
Run Code Online (Sandbox Code Playgroud)

但是现在这个外部模板无权访问Foo …

c++ templates c++11 c++03

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

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
查看次数

C++/CLI堆栈语义相当于C#的现有对象使用语句?

我知道C++/CLI相当于这个C#代码:

using (SomeClass x = new SomeClass(foo))
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

这是:

{
    SomeClass x(foo);
    // ...
}
Run Code Online (Sandbox Code Playgroud)

但有没有类似简洁和类似RAII的方式来表达这一点:

using (SomeClass x = SomeFunctionThatReturnsThat(foo))
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

要么:

SomeClass x = SomeFunctionThatReturnsThat(foo);
using (x)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

?我最接近的工作示例是:

SomeClass^ x = SomeFunctionThatReturnsThat(foo);
try
{
    // ...
}
finally
{
    if (x != nullptr) { delete x; }
}
Run Code Online (Sandbox Code Playgroud)

但这似乎不太好.

.net idisposable using c++-cli finally

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