当涉及到函数(C++ 中的非成员函数)时,将它们标记为静态会赋予它们内部链接。这意味着它们在翻译单元之外不可见。为什么这不是默认值?我没有很好的统计数据,但从我所看到的实现文件中的大多数函数应该标记为静态。
我相信共识是将功能分割成更小的单元。因此,一般来说,实现文件中不应该在其他翻译单元中可见的“实用程序”类函数的数量大于只是公共接口的实现的函数的数量,这是有道理的。
在这种情况下,他们默认选择“导出所有内容”的原因是什么?
我使用区域和语言下的“添加语言”添加了许多声音。这些显示在“语音”中的“文本转语音”下。(我使用的是Windows 10)
我想在我的应用程序中将这些SpeechSynthesizer与 System.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 George和Microsoft Mark。
这里接受的答案: SpeechSynthesizer 没有获取所有已安装的声音 建议将平台更改为 x86。我尝试过,但没有看到任何变化。
这个答案: SpeechSynthesizer 没有获取所有已安装的声音 2 建议使用 .NET v4.5,因为 .NET v4.5 中存在错误 …
我正在尝试向使用 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
您好,我正在尝试使用模拟设备将事件记录到 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
我正在尝试实现从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) 我正在统一创建一个简单的图块地图编辑器扩展,因为默认的扩展缺乏我的项目需要的很多功能。我正在继承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
android ×2
c# ×2
c++ ×2
firebase ×2
.net ×1
adb ×1
asynchronous ×1
c ×1
dllexport ×1
javascript ×1
windows-10 ×1