小编Vic*_*gue的帖子

在 Android 中使用 RPC 的标准方法是什么?

在 Android 中使用 RPC 的标准方法是什么?在 Android 中进行 RPC 的官方方式对我来说似乎是 AIDL。那是对的吗?

首先,我对Android很陌生。但开始是好的。我正在热身我已经从 Java 中了解的功能。现在我想更进一步,在我现有的一些 Java 软件中使用一些高级技术。

这是场景。我有一个小的 Java 服务器,它运行一个名为 SIMON 的面向对象的 RPC 版本。现在我想把它和安卓结合起来。意味着在 Android 设备上我想运行一个小应用程序作为客户端,从我的服务器获取其信息。

我阅读了一些说明来为 android 编写客户端和服务器。但是两者都在我不想运行的 android 上运行。

有人知道如何在Android和Java之间结合RPC吗?也许我可以搜索的一些链接或提示应该可以解决问题。现在我有点迷茫,把这两个世界结合起来。

我已经遇到过 REST、JSON、XML-RPC、SOAP,他们需要我不想使用的外部库。我想坚持使用 Android 的标准方式来保持它的“原始”Android。任何。纯Android代码是我在这个阶段的目标。

android rpc

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

嵌套名称说明符中使用的不完整类型 `std::variant<...>`

我将以下代码写入名为 的文件中main.cpp。\n它涉及标准类型的奇怪的重复模板模式 (CRTP) std::variant

\n
#include <string>\n#include <variant>\n#include <vector>\n\ntemplate<typename T>\nstruct either {\n    std::vector<T> arg;\n};\n\ntemplate<typename T>\nstruct maybe_either: std::variant<T, either<maybe_either<T>>> {\n\n    template<typename U>\n    maybe_either(U&& v):\n      std::variant<T, either<maybe_either<T>>>(std::forward<U>(v)) {\n    }\n};\n\nstruct var {\n  std::string name;\n};\n\nint main(int, char**) {\n    auto expression = maybe_either<var>(either<maybe_either<var>>{});\n    std::visit([&](auto&& v) {\n        using T = std::decay_t<decltype (v)>;\n        if constexpr (std::is_same_v<T, var>) {\n          // ...\n        } else if constexpr (std::is_same_v<T, either<maybe_either<var>>>) {\n          // ...\n        }\n    }, expression);\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

当使用以下命令行编译它时,我收到以下错误消息:

\n
$ g++ -c -std=c++17 main.cpp\nIn file included …
Run Code Online (Sandbox Code Playgroud)

c++ variant crtp c++17

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

到底为什么从结构体切换到枚举会破坏 API?

在公共公关中遇到了一个有趣的变化。最初他们有:

#[derive(Debug, Clone, PartialEq, Eq, Copy)]
pub struct ParseError(ParseErrorKind);

#[derive(Debug, Clone, PartialEq, Eq, Copy)]
enum ParseErrorKind {
    OutOfRange // ... omitting other values here to be short
}
Run Code Online (Sandbox Code Playgroud)

ParseError由于是私有的,因此无法由客户端实例化ParseErrorKind。他们现在正在公开这一点enum,这似乎没问题,但我建议了一种替代方案:成为ParseError一个enum自身,并利用类型系统,而不是用“种类”的概念来模仿它。他们告诉我这会导致 API 损坏,因此不行。

我想我明白为什么理论上 astruct和 anenum是不同的。但我不确定为什么它在这种情况下不兼容。

由于struct ParseError没有可变字段并且无法由客户端实例化,因此我们无法对该类型执行任何操作,只能对其进行分配和比较。似乎两者structenum支持这一点,因此客户端代码不太可能需要更改才能使用公开的新版本enum而不是struct. 或者我是否错过了我们可以使用 的另一种用途struct,这将导致需要更改客户端代码?

但是,也可能存在 ABI 不兼容的情况。Rust 在实践中如何处理struct,因为知道只有库才能构造它?是否有任何类型的分配或释放机制需要ParseError在构建时准确地知道它是由什么组成的?从那个确切的转换structenum那个会产生影响吗?或者在这种特殊情况下它是否安全?由于到目前为止还无法保证,这与尝试维持 ABI …

rust

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

标签 统计

android ×1

c++ ×1

c++17 ×1

crtp ×1

rpc ×1

rust ×1

variant ×1