小编Kon*_*lph的帖子

在OS X上唯一标识活动窗口

我正在尝试修补使用辅助功能API调整窗口大小的应用程序.

我需要维护一个包含以前窗口大小的字典.密钥需要标识当前活动的窗口.此时,通过NSAccessibilityFocusedWindowAttribute按热键检索该活动窗口.

但是,每次调用此方法时AXUIElementRef,标识窗口的返回值都不同!这当然意味着我不能将它用作字典键 - 字典将找不到相应的条目.

以下代码重现了该问题:

-(IBAction)testWindowIdentification:(id)sender{
    AXUIElementRef focusedApp;
    AXUIElementRef focusedWindow;

    AXUIElementCopyAttributeValue(_systemWideElement,
                                  (CFStringRef) kAXFocusedApplicationAttribute,
                                  (CFTypeRef*) &focusedApp);
    AXUIElementCopyAttributeValue((AXUIElementRef) focusedApp,
                                  (CFStringRef) NSAccessibilityFocusedWindowAttribute,
                                  (CFTypeRef*) &focusedWindow);
    CFShow(focusedWindow);
}
Run Code Online (Sandbox Code Playgroud)

_systemWideElementinit使用调用方法在方法中初始化AXUIElementCreateSystemWide().

CFShow每次调用该方法时,该语句都会清楚地显示不同的ID(即使同一个窗口处于活动状态),这对我来说是无用的:

<AXUIElement 0x47e850> {pid=42463}
<AXUIElement 0x47e890> {pid=42463}
<AXUIElement 0x47e2c0> {pid=42463}
…
Run Code Online (Sandbox Code Playgroud)

关于文件AXUIElement显示没有检索用于UI元素的独特的属性,而且也不方法,所述的NSAccessibility协议.独特的PID是不是足以让我,因为一个进程可以有多个窗口.

如何在Cocoa中检索活动窗口的一些唯一标识符?

(顺便说一句,真正的代码是检查上述调用中的返回代码;没有错误,调用成功.)

macos cocoa objective-c

28
推荐指数
2
解决办法
5599
查看次数

为什么重新分配矢量副本而不是移动元素?

可能重复:
如何在向量增长时强制执行移动语义?

insert,push_backemplace(_back)可能导致的重新分配std::vector.我很困惑地看到以下代码复制元素而不是在重新分配容器时移动它们.

#include <iostream>
#include <vector>

struct foo {
    int value;

    explicit foo(int value) : value(value) {
        std::cout << "foo(" << value << ")\n";
    }

    foo(foo const& other) noexcept : value(other.value) {
        std::cout << "foo(foo(" << value << "))\n";
    }

    foo(foo&& other) noexcept : value(std::move(other.value)) {
        other.value = -1;
        std::cout << "foo(move(foo(" << value << "))\n";
    }

    ~foo() {
        if (value != -1)
            std::cout << "~foo(" …
Run Code Online (Sandbox Code Playgroud)

c++ stdvector move-semantics c++11

28
推荐指数
3
解决办法
6493
查看次数

是否可以将算法放入类中?

我有一个复杂的算法.它使用许多变量,在初始化时计算辅助数组,并沿途计算数组.由于算法很复杂,我将其分解为几个函数.

现在,我实际上并没有看到这可能是一种习惯性的方式; 我的意思是,我只是习惯将算法作为函数.用法只是:

Calculation calc(/* several parameters */);
calc.calculate();
// get the heterogenous results via getters
Run Code Online (Sandbox Code Playgroud)

另一方面,将它放入类中具有以下优点:

  • 我不必将所有变量传递给其他函数/方法
  • 在算法开始时初始化的数组在每个函数的整个类中都是可访问的
  • 我的代码更短,(imo)更清晰

混合方式是将算法类放入源文件中,并通过使用它的函数访问它.算法的用户不会看到该类.

有没有人有宝贵的想法可以帮助我?

非常感谢你提前!

c++ algorithm class

28
推荐指数
3
解决办法
1952
查看次数

将double转换为int数组

我有一个双

double pi = 3.1415;
Run Code Online (Sandbox Code Playgroud)

我想将其转换为int数组

int[] piArray = {3,1,4,1,5};
Run Code Online (Sandbox Code Playgroud)

我想出了这个

double pi = 3.1415;
String piString = Double.toString(pi).replace(".", "");
int[] piArray = new int[piString.length()];
for (int i = 0; i <= piString.length()-1; i++)
   piArray[i] = piString.charAt(i) - '0'; 
Run Code Online (Sandbox Code Playgroud)

它工作但我不喜欢这个解决方案,因为我认为数据类型之间的大量转换可能会导致错误.我的代码是否完整或是否需要检查其他内容?

那你怎么解决这个问题呢?

java arrays double int type-conversion

28
推荐指数
2
解决办法
2847
查看次数

具有泛型返回类型的可空引用类型

我正在使用新的C#8可空引用类型功能,并在重构我的代码时,我遇到了这个(简化)方法:

public T Get<T>(string key)
{
    var wrapper = cacheService.Get(key);
    return wrapper.HasValue ? Deserialize<T>(wrapper) : default;
}
Run Code Online (Sandbox Code Playgroud)

现在,这给出了一个Possible null reference return逻辑上的警告,因为default(T)将为所有引用类型赋予null.起初我以为我会把它改成以下内容:

public T? Get<T>(string key)

但这不可能做到.它说我要么必须添加通用约束where T : classwhere T : struct.但是,这是不是一种选择,因为这既可以是(我可以存储intint?或实例FooBar在缓存或其他).我还读到了一个假定的新泛型约束,where class?但似乎没有用.

我能想到的唯一简单的解决方案是使用null forgiving运算符更改return语句:

return wrapper.HasValue ? Deserialize<T>(wrapper) : default!;
Run Code Online (Sandbox Code Playgroud)

但这感觉不对,因为它肯定是空的,所以我基本上对这里的编译器撒谎:-)

我怎样才能解决这个问题?我错过了一些完全明显的东西吗?

c# generics c#-8.0 nullable-reference-types

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

计算IEnumerable <T>的最佳方法

什么是最好/最简单的方法来获取IEnumerable集合中的项目数而不枚举集合中的所有项目?

可以使用LINQ或Lambda吗?

c# linq

27
推荐指数
4
解决办法
5万
查看次数

为什么首先包含相关标题?

关于C/C++包含文件顺序/最佳实践的问题,最佳答案建议首先包含相关标题.

同为谷歌Mozilla的风格指南.

但是,在这两种情况下,我找不到你为什么要这样做的充分理由.

Google和Mozilla编码规则对我来说最合适,因为它们会强制您首先包含最"标准"的标头.

这样,我认为你不太可能弄乱包含的文件(例如通过取消定义其他标题中使用的一些宏等),这看起来像是最适合我的方式.

但是根据这个理由,为什么要首先包含相关的标题?由于它中的任何语法错误可能会弄乱以下所有标题?

我认为包括最后的相关标题将是最好的.

c++ header-files

27
推荐指数
2
解决办法
2444
查看次数

alignof(T) with T=__m512 不等于 alignof(__m512)

我遇到了一个奇怪的情况,alignof(__m512)它不等于std::alignment_of<__m512>::value由 Apple 的 clang 编译。经过一些测试,我发现当alignof(T)在模板中使用 进行评估时T=__m512,结果与直接不同alignof(__m512)。我还在 ubuntu(WSL) 上运行了几个由 g++ 和非 Apple 的 clang 编译的测试,并得到了正确的(我认为)行为。这是Apple的clang错误还是有关实施行为的问题?

#include <immintrin.h> //avx headers

#include <cstdio>
#include <typeinfo>
#include <type_traits>

void test_directly() {
  printf("directly: typeid %s alignof %zu\n", typeid(__m512).name(), alignof(__m512));
}

template<typename T>
void test_as_template_argument() {
  static_assert(std::is_same<T, __m512>::value, "assert");
  printf("template: typeid %s alignof %zu\n", typeid(T).name(), alignof(T));
}

int main() {
  test_directly();
  test_as_template_argument<__m512>();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出(编译clang++ -std=c++17 -march=native):

directly: typeid Dv16_f alignof 64
template: …
Run Code Online (Sandbox Code Playgroud)

c++ clang++

27
推荐指数
1
解决办法
457
查看次数

如何使用Reflection获取类的所有属性及其基类(在层次结构中)?(C#)

所以我现在所拥有的是这样的:

PropertyInfo[] info = obj.GetType().GetProperties(BindingFlags.Public);
Run Code Online (Sandbox Code Playgroud)

obj某个对象在哪里.

问题是我想要的一些属性不在于obj.GetType()它们在其中一个基类中.如果我停止调试器并查看obj,我必须挖掘一些"基础"条目以查看我想要获得的属性.是否有一些绑定标志我可以设置让它返回那些或我是否必须递归挖掘Type.BaseType层次结构并对GetProperties所有这些做?

c# reflection getproperties

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

如何在里面使用带引号的字符串?

我有以下字符串,我想将其作为一个进程执行:

Rundll32 Printui.dll,PrintUIEntry /ia /K /q /m "SHARP MX-5500N PS" /h "Windows NT x86" /v 3 /f sn0hwenu.inf

但是,如果存在引号,我无法在C#中插入此字符串以使其进行编译,从而保留所有原始结构.我该怎么解决这个问题?由于字符串中有引号,这有点棘手.

c#

26
推荐指数
4
解决办法
9万
查看次数