我试图在python中使用一些COM对象做一个示例应用程序.我已经从Win32上的Python编程中读到了着名的第12章,但是关于这个问题,它只说明:
所有事件处理都是使用普通
IConnectionPoint接口完成的,虽然超出了本书的范围,但标准Python COM框架完全支持.
任何人都可以对此有所了解吗?我需要一个简单的入门样本.类似于为此示例添加代码以捕获电子表格的OnActivate事件
import win32com.client
xl = win32com.client.Dispatch("Excel.Application")
...
Run Code Online (Sandbox Code Playgroud) 最小的例子:
#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 == …