小编Jam*_*mes的帖子

指向字面值的指针

假设我在头文件中定义了一个常量

#define THIS_CONST 'A'
Run Code Online (Sandbox Code Playgroud)

我想把这个常量写成一个流.我做的事情如下:

char c = THIS_CONST;
write(fd, &c, sizeof(c))
Run Code Online (Sandbox Code Playgroud)

不过,我会喜欢的简洁和清晰要做的是:

write(fd, &THIS_CONST, sizeof(char)); // error
                                      // lvalue required as unary ‘&’ operand
Run Code Online (Sandbox Code Playgroud)

有谁知道获取指向文字的指针的任何宏/其他技巧?我想要一些可以这样使用的东西:

write(fd, PTR_TO(THIS_CONST), sizeof(char))
Run Code Online (Sandbox Code Playgroud)

注意:我意识到我可以将我的常量声明为静态const变量,但是我不能在switch/case语句中使用它们.即

static const char THIS_CONST = 'A'
...
switch(c) {
  case THIS_CONST: // error - case label does not reduce to an integer constant
    ...
}
Run Code Online (Sandbox Code Playgroud)

除非有办法在案例标签中使用const变量?

c

16
推荐指数
3
解决办法
9475
查看次数

用于迭代GList的宏

我正在使用GLib的双链表结构,GList.我想知道是否有任何标准的宏来迭代GList.我在GLib文档中找不到任何这样的东西.结果我制作了自己的宏,但如果它存在,我宁愿使用标准的东西.

说明问题:通常我写了很多代码如下:

GList *list, *elem;
MyType *item;

for(elem = list; elem; elem = elem->next) {
  item = elem->data;
  /* do something with item */
}
Run Code Online (Sandbox Code Playgroud)

使用宏可以减少到

GList *list;
MyType *item;

GFOREACH(item, list) {
  /* do something with item */
}
Run Code Online (Sandbox Code Playgroud)

哪个不那么吵.


注意:我意识到GLib提供了一个foreach函数,用于迭代列表并为每个元素调用回调,但是回调的间接使得代码更难以读取,特别是如果回调仅使用一次.


更新:看到没有标准宏,我正在使用我在这里使用的宏,以防它对别人有用.欢迎更正/改进.

#define GFOREACH(item, list) for(GList *__glist = list; __glist && (item = __glist->data, true); __glist = __glist->next)
Run Code Online (Sandbox Code Playgroud)

c macros glib

11
推荐指数
1
解决办法
5873
查看次数

如何在没有共同父母的情况下一步构建多个maven项目?

我已经读过,可以一步构建多个Maven项目(自动构建依赖项),可以使用Maven reactor插件.但是,我看到的所有示例都表明,为了使用这个插件,相互依赖的包是一个共同的父项目的模块.

是否可以使用maven在一个步骤中构建多个项目,而这些项目不是共同父项目的模块?

例如 - 来自不同存储库的两个项目,一个项目依赖于另一个项目,我想对两个项目进行本地更改并一步构建所有项目.我可以这样做吗?

maven-2

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

等待Unix域套接字被绑定

我正在编写一个客户端应用程序,该应用程序通过Unix域套接字连接到服务器进程。如果服务器进程未运行,我希望客户端等待服务器启动并正在侦听套接字上的连接。

目前,我在客户端中有一个重试循环,每秒调用一次connect(),直到它成功连接到套接字为止。

我是否可以调用任何函数,这些函数将一直阻塞直到创建特定的命名套接字(例如“ / var / mysock”)并将其绑定到服务器进程为止?

ipc unix-socket

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

OpenID Connect - 使用JWT的Javascript应用程序的隐式流程,以使用REST API进行身份验证

我正在开发一个Javascript app + REST API.

我希望用户通过OpenID Connect Provider对应用程序(和底层REST API)进行身份验证,以实现SSO目的.

使用Implicit流程我可以获得一个ID令牌(JWT)来识别我的javascript应用程序的用户.我希望我可以在Authorize标头中发送此JWT,以请求我的REST API对用户进行身份验证.但是,这种方法的问题是JWT的'aud'字段不适用于REST API服务器,它适用于javascript应用程序.

这是否意味着隐式流不适合我的用例,或者我错过了什么?

security openid-connect

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

使用导航架构组件在片段中显示对备份/备份的确认

我正在使用Android的导航架构组件。

对于我的片段之一,我希望截取“后退”和“上移”导航,以便在用户放弃任何未保存的更改之前可以显示一个确认对话框。(在编辑事件详细信息后按上/下键时,与默认的日历应用程序行为相同)

我当前的方法(未经测试)如下:

对于“向上”导航,我覆盖onOptionsItemSelected了片段:

override fun onOptionsItemSelected(item: MenuItem?): Boolean {
    if(item?.itemId == android.R.id.home) {
        if(unsavedChangesExist()) {
            // TODO: show confirmation dialog
            return true
        }
    }
    return super.onOptionsItemSelected(item)
}
Run Code Online (Sandbox Code Playgroud)

对于“后退”导航,我在片段及其活动之间创建了一个自定义接口和回调系统:

interface BackHandler {
    fun onBackPressed(): Boolean
}

class MainActivity : AppCompatActivity() {
    ...

    val backHandlers: MutableSet<BackHandler> = mutableSetOf()

    override fun onBackPressed() {
        for(handler in backHandlers) {
            if(handler.onBackPressed()) {
                return
            }
        }
        super.onBackPressed()
    }

    ...
}

class MyFragment: Fragment(), BackHandler {
    ...

    override fun onAttach(context: Context) {
        super.onAttach(context)
        if (context …
Run Code Online (Sandbox Code Playgroud)

android android-architecture-navigation

4
推荐指数
2
解决办法
2014
查看次数

JavaFX:连接序列

是否有标准库函数或内置构造来连接JavaFX中的两个序列?

这里提到了一个Sequences.concatenate()函数,但它在官方API中无处可见.

当然,可以迭代每个序列,将值插入新序列,例如:

function concatenate(seqA: Object[], seqB: Object[]) : Object[] {
    for(b in seqB) insert b into seqA;
    seqA;
}
Run Code Online (Sandbox Code Playgroud)

..但确实已经为我们某处定义了像连接一样基本的东西..

javafx sequence

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