小编da_*_*m_n的帖子

在Python中使用COM事件

我试图在python中使用一些COM对象做一个示例应用程序.我已经从Win32上的Python编程中读到了着名的第12章,但是关于这个问题,它只说明:

所有事件处理都是使用普通IConnectionPoint接口完成的,虽然超出了本书的范围,但标准Python COM框架完全支持.

任何人都可以对此有所了解吗?我需要一个简单的入门样本.类似于为此示例添加代码以捕获电子表格的OnActivate事件

import win32com.client
xl = win32com.client.Dispatch("Excel.Application")
...
Run Code Online (Sandbox Code Playgroud)

python com pywin32

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

衍生类中的表达,铿锵与休息

最小的例子:

#include <cstddef>
struct B
{
    constexpr static const size_t MAX = 10;
};

struct D : B 
{
    constexpr static const size_t MAX = 20;
};

void use(const B& v)
{
    static_assert(v.MAX == 10, "");
}

template<typename X>
void use2(X&& v)
{
    static_assert(v.template MAX == 20, "");
}

int main ()
{
    D d;
    static_assert(d.MAX == 20, "");
    use(d);
    use2(d);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

GCC(v5.4 ... v7.3):编译好(任何级别的优化和-Wall -Wextra -pedantic)ICC/MSVC:编译好(在godbolt.org上尝试各种版本)

CLANG(v4 ... v6):错误:static_assert表达式不是整数常量表达式static_assert(v.MAX == 10,"");

编辑(改写问题):

在我看来,clang的行为是最不令人惊讶的(或更直观).鉴于它的失败编译上面的代码中仅有的编译器,我想了解哪两个行为是正确的,为什么呢?

编辑2:

通过添加模板函数判断,gcc看起来使用参数的声明类型,并确定使用哪个constexpr成员,而不管传入的是什么.

如果通过值,clang也会将MAX评估为常量表达式.在这种情况下,很明显为什么v.MAX == …

c++ gcc clang

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

标签 统计

c++ ×1

clang ×1

com ×1

gcc ×1

python ×1

pywin32 ×1