这似乎应该很容易,但我只是没有得到什么.
我想创建一个包含单个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)
然而,这是扩展到浏览器的整个宽度(对于宽而短的窗口)并产生垂直滚动,这不是我想要的.
我错过了什么?
在模板化代码中使用特征时,以下代码模式是否合理,其中两个替代实现始终可编译?
阅读代码似乎比做其他恶作剧有条件地编译更清楚(但也许我对那些恶作剧我不够熟悉).
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情况下能够像只用第一个块作为主体来编写方法一样有效(反之亦然,尽管我不太担心复杂的情况).
如果这不是正确的方法,有人可以请教我推荐的语法吗?
希望我只是遗漏了一些明显的东西,但我试图了解Windows窗体中 Load和Shown事件之间的差异.
传统上,我只使用Load(或实际上是OnLoad,因为我认为覆盖一个方法比依靠设计者自己连接一个事件更干净),因为在所有版本的.NET中都可以使用它.使用.NET 2.0,引入了Shown事件.
现在,如果你在MSDN文档中查看这些描述("加载:第一次显示表单之前发生.","显示:每当表单首次显示时发生.")听起来像Load事件应该发生,然后表格应该可见,然后应该发生显示事件; 两者的结合使您可以在表格可见之前和之后执行某些任务.有道理,对吗?
但是,实验表明Shown事件总是发生在 Load事件之前,每当我尝试它时(两者都发生在表单变得可见之前).然而,当我发现一个关于这些事件被触发的命令的页面时,我在谷歌周围时,他们总是列出首先被触发的Load事件.
我只是疯了,还是我错过了什么?(如果它们确实在大约同一时间发生,那么为什么首先添加了已显示的事件?)
(我目前在显示表单之前和之后做某事的解决方案是使用OnLoad进行"显示之前"的操作并为"显示后"的东西启动一个短时间的一次性计时器.哪个工作正常且可靠,但是它有点难看,我希望有一个更清洁的解决方案.但看起来显示的事件不是它.)
在以下代码中(在本地和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) 是否可以在Window.Owner不获取所有功能的情况下获得某些功能?
有两个窗口,窗口A和窗口B.我想这样做,以便选择任何一个将使它们在其他应用程序之上,但任何一个可以覆盖另一个.(实际上,不仅仅是两个,但它们都应该表现得相似.)
如果我将窗口B设置Owner为A,那么切换到任一窗口都会将两者都放在其他应用程序(我想要的)之前,但也会强制B始终位于A之上(我不想要).
我实际上已经有了独立于Owner/ 跟踪窗口层次结构的代码OwnedWindows,所以我可以扩展它以解决激活问题.因此,如果这简化了问题,我正在寻找的另一个答案是:
我如何实际做"当用户激活此窗口时,将一组特定窗口(应用程序中的所有其他窗口)带到我下面的Z顺序,同时保留它们相对于彼此的现有Z顺序" ?
此代码编译:
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
这似乎应该经常被问及回答,但我的搜索功能让我失望了.
我正在编写一个函数,我想接受某种通用的可调用对象(包括裸函数,手动仿函数对象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的答案感兴趣,因为我在两种语言的项目中都使用类似的结构.
我想做这样的事情:
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实现DoThingOne和DoThingTwo.这不是一个鸭子类型的东西,我只想做这个额外的部分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 …
是否有可能在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++/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)
但这似乎不太好.
c++ ×5
.net ×3
c++11 ×3
templates ×2
.net-2.0 ×1
aspect-ratio ×1
c# ×1
c++-cli ×1
c++03 ×1
c++17 ×1
const ×1
constexpr ×1
criteria ×1
events ×1
finally ×1
functor ×1
idisposable ×1
layout ×1
nhibernate ×1
owner ×1
scaling ×1
svg ×1
type-traits ×1
using ×1
window ×1
winforms ×1
wpf ×1
xhtml ×1
z-order ×1