小编use*_*240的帖子

为什么clang和gcc使用类内初始化来处理结构的粗略初始化?

我最近发现了clang和gcc的奇怪行为.我有一个struct(MyClass),它为其中一个成员(active)使用类内初始化:

struct MyClass {
  int something;
  bool active = true;
};
Run Code Online (Sandbox Code Playgroud)

现在我尝试对这个类进行大括号初始化.

使用clang,我可以决定是否包含active在初始化列表(MyClass a = { 42, true};)中或不包含(MyClass a = { 42 };).

但是使用gcc,我的代码只有在我不包含的情况下编译active.否则,我将得到以下编译器错误:

 error: could not convert ‘{42, true}’ from ‘<brace-enclosed initializer list>’ to ‘MyClass’
Run Code Online (Sandbox Code Playgroud)

这是一个错误吗?标准对此有何评价?VSC++怎么样?您推荐哪种方式作为便携式解决方案?

在Debian Linux上使用gcc 4.9和clang 3.5进行测试.

c++ gcc clang c++11 c++14

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

使用Blender的Python API打开.blend文件

我正在尝试为Blender 2.73创建一个自动构建系统,该系统读取包含大量路径的XML文件,逐个打开文件然后呈现它们.

我正在使用以下代码打开:

bpy.ops.wm.open_mainfile("file_path")
Run Code Online (Sandbox Code Playgroud)

我的问题是我收到以下错误:

Traceback (most recent call last):
  File "<blender_console>", line 1, in <module>
  File "<BLENDER_PATH>/scripts/modules/bpy/ops.py", line 186, in __call__
    ret = op_call(self.idname_py(), C_dict, kw, C_exec, C_undo)
TypeError: Calling operator "bpy.ops.wm.open_mainfile" error, expected a string enum in ('INVOKE_DEFAULT', 'INVOKE_REGION_WIN', 'INVOKE_REGION_CHANNELS', 'INVOKE_REGION_PREVIEW', 'INVOKE_AREA', 'INVOKE_SCREEN', 'EXEC_DEFAULT', 'EXEC_REGION_WIN', 'EXEC_REGION_CHANNELS', 'EXEC_REGION_PREVIE)
Run Code Online (Sandbox Code Playgroud)

python blender bpy

6
推荐指数
1
解决办法
7523
查看次数

如何重载用于枚举的模板函数?

我有一堆函数,它们都具有相同的名称,但是具有不同的参数(其中一些是模板,有些不是):

void f(int& a) { ... } // there are a few other arithmetic types as well
void f(bool& a) { ... }
template <class T1, class T2> void f(std::pair<T1, T2>&a) { ... } 
template <class T> void f(T& a) { ... }
// ...
Run Code Online (Sandbox Code Playgroud)

除此之外,我还有一个枚举:

enum MyEnum {
  enumVal1, enumVal2
};
Run Code Online (Sandbox Code Playgroud)

我实际上以为,如果现在调用MyEnum e = enumVal1; f(e);,它将自动调用MyEnum底层类型的重载。没有。而是,它生成一个编译器错误。

现在,我想定义一个模板函数来捕获所有枚举并调用适当的函数。

template <class T, std::enable_if_t<std::is_enum<T>{}> * = nullptr>
void f(T &a) { /* cast to std::underlying_type<T> and call f() …
Run Code Online (Sandbox Code Playgroud)

c++ enums templates c++14

2
推荐指数
1
解决办法
357
查看次数

标签 统计

c++ ×2

c++14 ×2

blender ×1

bpy ×1

c++11 ×1

clang ×1

enums ×1

gcc ×1

python ×1

templates ×1