小编Tag*_*gor的帖子

为什么实现文件中的自由函数默认没有内部链接?

当涉及到函数(C++ 中的非成员函数)时,将它们标记为静态会赋予它们内部链接。这意味着它们在翻译单元之外不可见。为什么这不是默认值?我没有很好的统计数据,但从我所看到的实现文件中的大多数函数应该标记为静态。

我相信共识是​​将功能分割成更小的单元。因此,一般来说,实现文件中不应该在其他翻译单元中可见的“实用程序”类函数的数量大于只是公共接口的实现的函数的数量,这是有道理的。

在这种情况下,他们默认选择“导出所有内容”的原因是什么?

c c++

16
推荐指数
4
解决办法
1732
查看次数

SpeechSynthesizer 无法获取所有已安装的语音 3

我使用区域和语言下的“添加语言”添加了许多声音。这些显示在“语音”中的“文本转语音”下。(我使用的是Windows 10)

我想在我的应用程序中将这些SpeechSynthesizerSystem.Speech.Synthesis.

当在我的应用程序中列出可用的语音时,仅显示少数实际可用的语音:

static void Main()
{
    SpeechSynthesizer speech = new SpeechSynthesizer();

    ReadOnlyCollection<InstalledVoice> voices = speech.GetInstalledVoices();
    if (File.Exists("available_voices.txt"))
    {
        File.WriteAllText("available_voices.txt", string.Empty);
    }
    using (StreamWriter sw = File.AppendText("available_voices.txt"))
    {
        foreach (InstalledVoice voice in voices)
        {                 
            sw.WriteLine(voice.VoiceInfo.Name);                           
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

查看available_voices.txt仅列出这些声音:

Microsoft David Desktop
Microsoft Hazel Desktop
Microsoft Zira Desktop
Microsoft Irina Desktop
Run Code Online (Sandbox Code Playgroud)

但是在设置中的“文本转语音”下还有更多内容,例如Microsoft GeorgeMicrosoft Mark

这里接受的答案: SpeechSynthesizer 没有获取所有已安装的声音 建议将平台更改为 x86。我尝试过,但没有看到任何变化。

这个答案: SpeechSynthesizer 没有获取所有已安装的声音 2 建议使用 .NET v4.5,因为 .NET v4.5 中存在错误 …

.net c# text-to-speech windows-10 visual-studio-2017

10
推荐指数
3
解决办法
5870
查看次数

匿名用户认证时触发的云函数

我正在尝试向使用 Firebase Cloud Functions 从匿名用户转换为永久用户的用户发送欢迎邮件。

之前我遵循了github 上的示例代码,代码在创建用户时发送了一封电子邮件。

示例代码使用了 onCreate 钩子:

exports.sendWelcomeEmail = functions.auth.user().onCreate(event => {
      const user = event.data; 
      const email = user.email; 

      ... send the email
});
Run Code Online (Sandbox Code Playgroud)

创建匿名用户时会触发此函数(这不是我想要的,因为此时用户没有指定电子邮件)。

当匿名用户转换为永久用户时,onCreate 不会明显触发,因为用户是转换的而不是创建的。当匿名用户转换为永久用户时,我应该使用什么云函数来触发?

在查看 Firebase 云函数参考时,特别是在Firebase 身份验证函数的命名空间中,我发现只有两种方法可以使用:onCreate 和 onDelete。那么我有什么选择呢?

编辑:我去 Google 群组询问 Firebase 并得到了这个答案:

您好,谢谢您的请求。请通过支持渠道提交正式请求: https: //firebase.google.com/support/您可以使用实时数据库或 Firestore 在匿名用户升级时从客户端设置一些标志,然后监听该节点的更改在云函数中。这应该可以为您提供所需的功能。

此致,

所以基本上可以为其创建一个自定义侦听器。

javascript android firebase firebase-realtime-database google-cloud-functions

6
推荐指数
0
解决办法
718
查看次数

Firebase DebugView 未接收事件

您好,我正在尝试使用模拟设备将事件记录到 Firebase 的调试视图。

我做了什么:

我首先将命令 adb shell setprop debug.firebase.analytics.app [my_package_name]放入 adb shell 中。

我将模拟器谷歌服务更新到最新版本。

我将模拟器时间设置为与当前时间匹配。

这是我用来记录事件的方法:

@Override
public void logEvent(String id, String name, String contentType) {
    Bundle bundle = new Bundle();
    bundle.putString(FirebaseAnalytics.Param.ITEM_ID, id);
    bundle.putString(FirebaseAnalytics.Param.ITEM_NAME, name);
    bundle.putString(FirebaseAnalytics.Param.CONTENT_TYPE, contentType);
    FirebaseAnalytics.getInstance(this).logEvent(FirebaseAnalytics.Event.SELECT_CONTENT, bundle);
    Log.i("Firebase", "Event " + "\"" + name + "\"" + " logged");
}
Run Code Online (Sandbox Code Playgroud)

当调用事件时,该事件会记录到 adb shell:

12-10 14:59:26.581 D/FA      ( 6761): Passing event to registered event handler (FE): select_content, Bundle[{item_name=game_started, content_type=started, item_id=0}]
12-10 14:59:26.585 D/FA      ( 6761): Logging event …
Run Code Online (Sandbox Code Playgroud)

android google-analytics adb firebase firebase-realtime-database

5
推荐指数
0
解决办法
1588
查看次数

托管异步接口 - >非托管代码

我正在尝试实现从C#Unity到C++的异步接口.

这是C++中的公开函数:

struct Vector3 {
    float x;
    float y;
    float z;
};

extern "C" {
    DLLEXPORT void sync_test(void*(Vector3[], int));
    DLLEXPORT void async_test(void*(Vector3[], int));
}
Run Code Online (Sandbox Code Playgroud)

它们是这样实现的:

void do_work(void*(onResult)(Vector3[], int)) {
    int size = 30;
    Vector3* result = new Vector3[size];
    for (int i = 0; i < size; i++) {
        result[i] = { 5,(float)i,2 };
    }
    onResult(result, size);
    delete[] result;
}

DLLEXPORT void sync_test(void*(onResult)(Vector3[], int)) {
    do_work(onResult);
}

DLLEXPORT void async_test(void*(onResult)(Vector3[], int)) {
    std::thread thread(do_work, onResult);
}
Run Code Online (Sandbox Code Playgroud)

这是我在C#中使用它们的方式:

[DllImport("Isosurfaces.dll")]
static extern void …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading asynchronous unity-game-engine dllexport

3
推荐指数
1
解决办法
74
查看次数

Unity编辑器捕获“按住鼠标并移动”事件

我正在统一创建一个简单的图块地图编辑器扩展,因为默认的扩展缺乏我的项目需要的很多功能。我正在继承EditorWindow。按住鼠标左键并拖动鼠标时,我想在场景中放置图块(在编辑器模式下)。

下图说明了我想要的行为。

在此输入图像描述:

我面临的问题是如何识别这个事件。这是我使用的处理鼠标输入的函数:

void HandleMouseInput() {
    Event e = Event.current;
    switch (e.type) {
    case EventType.MouseDown:
        if (e.button == 0) PlaceTile();
        break;
    case EventType.MouseMove:
        Debug.Log("Moving");
        Debug.Log(e.button); // <-- always show 0 (left click) even though mouse is not clicked.
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

第一种情况(单块放置)按预期工作。但我未能捕获“按住鼠标左键”事件。我可以捕获鼠标移动事件EventType.MouseMove,但然后我需要是否有左键单击。根据统一文档,e.button == 0表示左键单击(在第一个开关情况下按预期工作)。但在第二种情况下e.button,无论单击哪个鼠标按钮,始终为 0。还有一个EventType.MouseDrag,但它似乎只有当您在场景中选择一个游戏对象并拖动它时才会触发。

在 Unity 中,当按住鼠标左键并移动鼠标时,默认行为似乎是创建一个选择框:

在此输入图像描述

或者,如果在编辑器左上角选择了手形图标,则拖动整个场景。

本质上我想捕获这个事件并用我自己的功能覆盖结果。

编辑:我想我可以通过创建自定义工具来解决这个问题https://docs.unity3d.com/ScriptReference/EditorTools.EditorTool.html

c# unity-game-engine

3
推荐指数
1
解决办法
7560
查看次数