是否可以推导出函数参数的类型?例如,如果我有:
void foo(int a);
Run Code Online (Sandbox Code Playgroud)
我想推断出类型int是foo第一个参数的类型.可能的用途可能是:
foo( static_cast< decltype(/* ??? foo's first param ??? */) >(value) );
Run Code Online (Sandbox Code Playgroud)
在这个相关的问题中,答案利用具有相同类型的成员进行演绎,因此它不直接推导出函数参数类型.
我正在尝试为我的发布配置生成一个 dSYM 文件。在我的 CMake 配置中,我有:
if (CMAKE_GENERATOR STREQUAL "Xcode")
# generate debug symbols in a .dsym file for release mode
set(CMAKE_XCODE_ATTRIBUTE_GCC_GENERATE_DEBUGGING_SYMBOLS[variant=Release]
"YES")
set(CMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT[variant=Release]
"dwarf-with-dsym")
# strip symbols from final executable
set(CMAKE_XCODE_ATTRIBUTE_DEPLOYMENT_POSTPROCESSING[variant=Release]
"YES")
endif()
Run Code Online (Sandbox Code Playgroud)
调试信息格式和部署后处理都被用于发布配置。然而,Generate Debug Symbols在Xcode接口/GCC_GENERATE_DEBUGGING_SYMBOLS中xxx.xcodeproj/project.pbxproj的文件被设置为NO在发布配置。
取消[variant=Release]限制对发布配置没有影响。如果我手动打开 Release 中的设置,我会得到想要的结果。如何让 CMake 使用此设置为 Release 配置创建 Xcode 项目?
我不想使用,RelWithDebInfo因为它的优化设置较低(-O2而不是-O3)。我想要.dSYM用于调试现场崩溃的文件。
我正在寻找将org.eclipse.jdt.core.dom.ITypeBinding实例转换为实例的一般方法org.eclipse.jdt.core.dom.Type.虽然我觉得应该有一些API调用来做到这一点,但我找不到一个.
根据具体类型,似乎有多种方法可以手动执行此操作.
ITypeBinding如果Type没有所有这些特殊情况,是否有任何一般方法可以获得并得到一个?拿a String和返回a Type也是可以接受的.
更新
从目前为止的反应来看,似乎我必须处理所有这些特殊情况.这是第一次尝试这样做.我确信这不是完全正确的,所以请仔细审查:
public static Type typeFromBinding(AST ast, ITypeBinding typeBinding) {
if( ast == null )
throw new NullPointerException("ast is null");
if( typeBinding == null )
throw new NullPointerException("typeBinding is null");
if( typeBinding.isPrimitive() ) {
return ast.newPrimitiveType(
PrimitiveType.toCode(typeBinding.getName()));
}
if( typeBinding.isCapture() ) {
ITypeBinding wildCard = typeBinding.getWildcard();
WildcardType capType = ast.newWildcardType();
ITypeBinding bound = wildCard.getBound();
if( bound != null ) {
capType.setBound(typeFromBinding(ast, bound)),
wildCard.isUpperbound());
}
return capType; …Run Code Online (Sandbox Code Playgroud)