小编Jak*_*obb的帖子

函数参数的decltype

是否可以推导出函数参数的类型?例如,如果我有:

void foo(int a);
Run Code Online (Sandbox Code Playgroud)

我想推断出类型intfoo第一个参数的类型.可能的用途可能是:

foo( static_cast< decltype(/* ??? foo's first param ??? */) >(value) );
Run Code Online (Sandbox Code Playgroud)

这个相关的问题中,答案利用具有相同类型的成员进行演绎,因此它不直接推导出函数参数类型.

c++ templates c++11 type-deduction

18
推荐指数
2
解决办法
3507
查看次数

带有 XCode 目标的 CMake,生成忽略发布配置的调试符号设置

我正在尝试为我的发布配置生成一个 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_SYMBOLSxxx.xcodeproj/project.pbxproj的文件被设置为NO在发布配置。

在 Release 中关闭生成调试符号

取消[variant=Release]限制对发布配置没有影响。如果我手动打开 Release 中的设置,我会得到想要的结果。如何让 CMake 使用此设置为 Release 配置创建 Xcode 项目?

我不想使用,RelWithDebInfo因为它的优化设置较低(-O2而不是-O3)。我想要.dSYM用于调试现场崩溃的文件。

xcode cmake debug-symbols

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

将Eclipse JDT ITypeBinding转换为Type

我正在寻找将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)

java eclipse abstract-syntax-tree eclipse-jdt

5
推荐指数
1
解决办法
1460
查看次数