假设我有struct和std::tuple同类型的布局:
struct MyStruct { int i; bool b; double d; }
using MyTuple = std::tuple<int,bool,double>;
Run Code Online (Sandbox Code Playgroud)
是否有任何标准化的方式来相互投射?
PS我知道琐碎的内存复制可以解决这个问题,但它依赖于对齐和实现
我有一个应用程序,实现python解释器,自定义python模块,导出类.示例c ++类可能如下所示:
class MyClass {
MyClass() { cout << "created" << endl; }
~MyClass() { cout << "destroyed" << endl; }
};
Run Code Online (Sandbox Code Playgroud)
执行python脚本的代码如下所示:
namespace bp = boost::python;
bp::dict dict;
try {
dict = bp::dict(bp::import("__main__").attr("__dict__"));
bp::exec_file(filename, dict, dict);
} catch (bp::error_already_set &) {
// dict.clear()
PyErr_Print();
PyErr_Clear();
}
Run Code Online (Sandbox Code Playgroud)
问题是,在脚本被异常终止后,不会立即销毁从python代码创建的c ++对象.例如,简单的脚本运行两次:
import MyModule
myobj = MyModule.MyClass()
assert False
Run Code Online (Sandbox Code Playgroud)
输出我得到(A):
// script launched first time
created
// script finished
// script launched second time
created
destroyed
// script finished
// Py_Finalize() …Run Code Online (Sandbox Code Playgroud) 假设我有这样的代码:
#if defined(SOMEDEF) && SOMEDEF >= 5
// ...
#endif
Run Code Online (Sandbox Code Playgroud)
基本上,SOMEDEF可能没有定义但是在运算符的抑制分支中使用&&.GCC接受此代码,但根据标准是否合法?所有编译器都支持这个吗?