我想写一个QDialog相似的类。我已经成功地很好地过滤了非对话框小部件的鼠标事件,但我仍然有焦点问题。由于QDialog相似的类只是一个常见的小部件,它可能会通过按键(选项卡)而失去焦点。因此,与 Lookalive 无关的小部件QDialog(我无法单击但可聚焦)可能会获得焦点。有没有一种巧妙的方法来防止用户将注意力从我的对话框相似的子小部件上移开?
说我有这个班:
struct A
{
A(int, int, int) {}
};
Run Code Online (Sandbox Code Playgroud)
我像这样初始化它:
A{ a(), b(), c() };
Run Code Online (Sandbox Code Playgroud)
凡功能a(),b()并且c()所有的回报int.应该a()在之前b()和b()之前调用c()吗?
我对标准中的以下段落感到困惑(8.5.4 [dcl.init.list] p4):
在braced-init-list的initializer-list中,initializer-clauses(包括pack扩展(14.5.3)产生的任何结果)按照它们出现的顺序进行评估.也就是说,与给定初始化子句相关联的每个值计算和副作用在每个值计算和副作用之前与在初始化列表的逗号分隔列表中跟随它之后的任何初始化子句相关联.[注意:无论初始化的语义如何,此评估顺序都保持不变; 例如,当initializer-list的元素被解释为构造函数调用的参数时,它适用,即使通常对调用的参数没有排序约束. - 结束说明]
根据引用,函数将按它们出现的顺序调用,但是当我用我的编译器(g ++ - 4.8.1)测试它时,它没有成功.我误解了什么吗?
如果我有这样的std::vector初始化:
0 1 2 3 4 5
Run Code Online (Sandbox Code Playgroud)
我怎样才能最好地将4个传播到第一个位置?即我想要std::vector在这种状态:
4 0 1 2 3 5
Run Code Online (Sandbox Code Playgroud)
移除4并重新插入它可能是昂贵的,因为O(N)我相信前面的插入.我在考虑在连续的地方交换价值(比如泡泡排序),但那也是O(N).是否只使用另一个容器std::list?
编辑:在看到一些混乱之后,让我澄清一下,我的目标是在一个已知的任意位置预先设置一个值std::vector,该值位于另一个已知位置的值前面std::vector.
我想在 中缓存一些文件$HOME/.cache,但我不知道在什么操作系统下我可以假设它已经存在。如果没有,我可以尝试自己创建它吗?或者这是一个错误?什么实体创建它?位置是否.cache标准化?标准是什么?
过去使用旧浮点数的技巧永远不会乘以2,而是添加一个自身的操作数,如2*a = a + a.今天使用SSE/SSE2/SSSE3/NEON/...指令集等的旧技巧仍然可行吗?我的操作数将是一个向量(例如,4个浮点数,我想乘以2).那么乘以3,4 ......?
我不是在寻找便携式SIMD实现.
我所需要的只是:一个比特准确的实现.只要性能不是非常慢,性能就无所谓.
我想将它用于早期开发和测试,以便我可以在主机上编译并运行前10个迭代.然后在ARM目标上交叉编译和微调性能.
我很习惯这种开发周期,当我与TI DSP的工作就像在这里描述.当我转向ARM NEON时,我想继续这样做.
这已经完成了,还是我需要发明轮子?
我正在写一个contains()实用功能,并提出了这个问题.我的问题是:有没有更好的方法来选择正确的函数来处理呼叫?
template <class Container>
inline auto contains(Container const& c,
typename Container::key_type const& key, int) noexcept(
noexcept(c.end(), c.find(key))) ->
decltype(c.find(key), true)
{
return c.end() != c.find(key);
}
template <class Container>
inline auto contains(Container const& c,
typename Container::value_type const& key, long) noexcept(
noexcept(c.end(), ::std::find(c.begin(), c.end(), key))
)
{
auto const cend(c.cend());
return cend != ::std::find(c.cbegin(), cend, key);
}
template <class Container, typename T>
inline auto contains(Container const& c, T const& key) noexcept(
noexcept(contains(c, key, 0))
)
{
return contains(c, key, …Run Code Online (Sandbox Code Playgroud) 使用C++模板元函数在编译时可以进行任何计算.因此,我正在考虑,如果可能的话:
void my_function(char const* string_ptr)
{
switch (hash_function(string_ptr))
{
case hash_metafunction<"yoohooo">::value:
...
break;
case hash_metafunction<"woooooo">::value:
...
break;
...
}
}
Run Code Online (Sandbox Code Playgroud)
您能否为哈希函数和模板元函数找到代码(库)的位置.如果没有这样的库存在,你能给出一些关于我如何自己滚动模板元函数的提示吗?我特别担心char const*模板元函数的参数.也许一些预处理器魔术可能吗?
我想做这样的事情:
template <typename T>
constexpr ::std::size_t type_name_hash()
{
return ::std::hash<::std::string>()(typeid(T).name());
}
Run Code Online (Sandbox Code Playgroud)
现在,我既不知道hash也不string是constexpr,但是这可能是周围的工作,承担他们constexpr.我想问的是,如果RTTI打开,constexpr计算哈希值的函数是否typeid(T).name()还会产生编译时常量?什么时候RTTI 关闭?
我有一个函数f()可以销毁函数调用过程中的所有寄存器(堆栈指针除外)。我怎样才能将其传达给gcc,以便调用者在调用之前保存它想要保存的所有寄存器f()?
编辑:我正在编写一个协程处理程序,它需要在切换到另一个协程之前保存状态,并且我想保存尽可能小的状态。假设我们有一个函数yield(),标记为“脏”,它会破坏除堆栈指针之外的所有内容。在控制权返回到我们的协程之后,该函数将神奇地返回,但最好是调用者而不是被调用者(因为调用者最清楚需要保存哪些寄存器)在调用之前保存需要保存的所有寄存器,然后yield()恢复它们然后。