小编key*_*ard的帖子

C++ - 为什么boost :: hash_combine是组合哈希值的最佳方法?

我在其他帖子中读到,这似乎是组合哈希值的最佳方式.有人可以打破这一点,并解释为什么这是最好的方法吗?

template <class T>
inline void hash_combine(std::size_t& seed, const T& v)
{
    std::hash<T> hasher;
    seed ^= hasher(v) + 0x9e3779b9 + (seed<<6) + (seed>>2);
}
Run Code Online (Sandbox Code Playgroud)

编辑:另一个问题只是要求神奇的数字,但我想知道整个功能,而不仅仅是这一部分.

c++ hash boost c++11

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

Android 11 - 本机 C++ 库的 System.loadLibrary 需要 60 秒以上,在 Android 10 及更低版本上运行速度非常快

在我们基于游戏引擎cocos2d-x的Android游戏应用程序中,大部分代码都是用C++编写的,自Android 11以来,我们遇到了一个非常奇怪且关键的问题:

当本地库加载时,onLoadNativeLibraries现在突然需要 60 多秒。在 Android 11 之前,一切正常,加载时间为 0.2-3 秒。现在,当您启动游戏时,您会看到 60 秒以上的灰屏。

我们已经知道JNI_OnLoad60 秒停顿结束后会直接调用。

这是该函数的代码onLoadNativeLibraries

protected void onLoadNativeLibraries()
{
    try
    {
        ApplicationInfo ai = getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
        Bundle bundle = ai.metaData;
        String libName = bundle.getString("android.app.lib_name");
        System.loadLibrary(libName); // line of 60 seconds stall
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

我们已经尝试过时间分析,但没有成功。只是它在该功能上花费了大量时间。此外,通过调试暂停不会导致任何进一步的线索。本机调试器不会在代码的 C++ 端显示任何内容。

有谁知道为什么会发生这种情况,或者我们可以尝试解决什么问题?任何帮助将不胜感激:)

c++ java-native-interface android cocos2d-x android-11

8
推荐指数
1
解决办法
2278
查看次数

Android JNI - 来自C++的Android UI线程上的调用函数

我们的游戏引擎Cocos2d-x在其自己的非Java-UI线程上本机运行在android上.我们需要在Android UI线程上通过JNI从C++调用某些Java函数.

为了调用JNI-Functions,我们从这里使用JNIHelper.h/cpp: https://github.com/cocos2d/cocos2d-x/blob/v3/cocos/platform/android/jni/JniHelper.h https: //github.com/cocos2d/cocos2d-x/blob/v3/cocos/platform/android/jni/JniHelper.cpp

例如这个C++代码:

Cocos2d-x

理想情况下,我们希望所有这些调用都发生在Android UI线程上,并将std :: function作为参数传递,一旦函数调用完成,就会再次使用Cocos2d-x-thread上的返回值调用该参数.

调用函数的理想方式:

auto retVal = JniHelper::callStaticStringMethod("org/utils/Facebook",
                         "getFacebookTokenString");
Run Code Online (Sandbox Code Playgroud)

但是也有很多没有任何返回值的调用,所以对于那些在java线程上调用它们应该更容易.

c++ java android android-ndk cocos2d-x

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

带有 NDK-Build 的 Android Studio - 不在项目导航器中显示 C++ 文件

我正在使用带有 NDK-Build 的 Android Studio,它不显示单个 C++ 文件,因此我无法调试。它只显示一个 cpp-Folder 并在 ethe 文件夹中显示一些静态库,我无法进一步介入。我记得曾经可以进入这些库(它们像文件夹一样打开)并查看单个 cpp 文件。

这是我的 build.gradle 文件:

    import java.util.regex.Pattern
    import com.android.build.OutputFile
    import org.apache.tools.ant.taskdefs.condition.Os


    apply plugin: 'com.android.application'
    apply plugin: 'io.fabric'



    task('increaseVersionCode') << {
        def buildFile = file("build.gradle")
        def pattern = Pattern.compile("versionCode\\s+(\\d+)")
        def manifestText = buildFile.getText()
        def matcher = pattern.matcher(manifestText)
        matcher.find()
        def versionCode = Integer.parseInt(matcher.group(1))
        def manifestContent = matcher.replaceAll("versionCode " + ++versionCode + "")
        buildFile.write(manifestContent)
    }

    // DO NOT change the build.gradle on debug builds any longer, since this will lead to debugging …
Run Code Online (Sandbox Code Playgroud)

c++ android android-ndk android-studio android-studio-2.3

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

VSCode-是否可以始终在顶部某个位置显示当前函数名称?

对于编辑JavaScript或TypeScript总是始终在顶部看到当前函数名称(例如Xcode这样做)非常有用。有时,当编辑一个长函数(或使控制台遮挡屏幕的较大部分)时,能够验证我实际上是否在正确的函数中/知道我目前在哪个函数中将非常有用。 。

那可能吗?

visual-studio-code

5
推荐指数
2
解决办法
266
查看次数

C++ 为自定义打印/日志功能的错误使用添加编译器警告

我有以下功能,我想在使用 printf 时发出警告:

void LoggingManager::log(int32_t logLevel, const char *p_str, ...)
{
    va_list args;
    va_start(args, p_str);
    vsnprintf(s_LogginManagerBuffer, LOGGING_MANAGER_BUFFER_SIZE - 1, p_str, args);
    va_end(args);

    internalLog(s_LogginManagerBuffer);
}
Run Code Online (Sandbox Code Playgroud)

如果我忘记为格式字符串中的一个标记添加参数,我想以某种方式发出警告。警告太多(或错误的论点)也会很棒。由于忘记了日志记录功能中的参数,我最近遇到了一些崩溃。

如果不可能这样做,我怎么能重写我的函数,有警告但功能相同?

c++ printing format compiler-warnings

4
推荐指数
1
解决办法
805
查看次数

iOS和Android上的Firebase邀请 - 是否可以在不显示UI的情况下生成共享链接?

Firebase Invites似乎附带了一个用于在iOS和Android上创建引荐链接的UI.由于我们正在制作游戏,我们希望使用自己的UI(至少可选择跳过显示标准系统UI).

是否有可能以编程方式将引用链接复制到剪贴板而不显示Invite UI?

android ios firebase firebase-invites firebase-dynamic-links

0
推荐指数
1
解决办法
404
查看次数