小编r3m*_*n0x的帖子

为什么在std :: optional的某些实现中会有一个伪联合成员?

libstdc ++(GNU)和libc ++(LLVM)都std::optional使用联合实现值存储,并且它们都包含一个虚拟成员。

GNU实现:

using _Stored_type = remove_const_t<_Tp>;
struct _Empty_byte { };
union {
    _Empty_byte _M_empty;
    _Stored_type _M_payload;
};
Run Code Online (Sandbox Code Playgroud)

LLVM实施:

union
{
    char __null_state_;
    value_type __val_;
};
Run Code Online (Sandbox Code Playgroud)

我的问题是:我们为什么需要这些_M_empty/ __null_state_会员?单成员工会有什么问题吗?

c++ optional unions c++17

28
推荐指数
1
解决办法
664
查看次数

Android/ServiceManager.addService() java.lang.SecurityException

我已经创建了系统应用程序。它有一个aidl 文件和服务。我已经在服务方法onStartCommand()中实现了aidl接口和addService。

mBinder = getBDBinder();
    try {
        ServiceManager.addService("test", mBinder);
        BDLog.r(TAG, "create and add");
    } catch (SecurityException e) {
        BDLog.e(TAG, "Add service SecurityException");
    }
Run Code Online (Sandbox Code Playgroud)

发生了 SecurityException。我该怎么办?我尝试了两种方法来解决这个问题,但都没有效果。

  1. 设定强度 0
  2. 在 service_context 文件中添加我的服务

这是我的清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="xxx.xxx.xxxx"
    android:sharedUserId="android.uid.system"
    android:versionCode="1200000"
    android:versionName="1.2.0" >

    <uses-feature android:name="android.hardware.type.watch" />

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="23" />

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.READ_SYNC_SETTINGS"/>
    <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.INTERNET"/>
    <application
        android:allowClearUserData="false"
        android:name=".xx"
        android:allowBackup="false"
        android:label="xx">

    </application>
</manifest>
Run Code Online (Sandbox Code Playgroud)

android

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

是否可以在GCC中使用C++ 17中的显式寄存器变量?

我使用显式寄存器变量将参数传递给原始Linux系统调用,使用没有机器特定约束的寄存器(如x86_64上的r8,r9,r10),如此处所示.

#include <asm/unistd.h>

#ifdef __i386__
#define _syscallOper "int $0x80"
#define _syscallNumReg "eax"
#define _syscallRetReg "eax"
#define _syscallReg1 "ebx"
#define _syscallReg2 "ecx"
#define _syscallReg3 "edx"
#define _syscallReg4 "esi"
#define _syscallReg5 "edi"
#define _syscallReg6 "ebp"
#define _syscallClob
#else
#define _syscallOper "syscall"
#define _syscallNumReg "rax"
#define _syscallRetReg "rax"
#define _syscallReg1 "rdi"
#define _syscallReg2 "rsi"
#define _syscallReg3 "rdx"
#define _syscallReg4 "r10"
#define _syscallReg5 "r8"
#define _syscallReg6 "r9"
#define _syscallClob "rcx", "r11"
#endif

template <typename Ret = long, typename …
Run Code Online (Sandbox Code Playgroud)

c++ assembly gcc inline-assembly c++17

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

从 Docker 容器内部使用 RabbitMQ

我正在尝试将 Docker 与应用程序一起使用。除了 Rabbit MQ 之外,一切似乎都有效。因此,为了创建测试用例,我做了以下操作:

第 1 步 - 在 Docker 外部运行 - 按预期工作

1) 创建一个简单的 ASP.NET Core 2.1 控制台应用程序:

using System;
using RabbitMQ.Client;

namespace DockerRabbitMQ
{
    class Program
    {
        static void Main(string[] args)
        {
            RabbitMQConnect();
        }

        public static void RabbitMQConnect()
        {
            var factory = new ConnectionFactory
            {
                HostName = "localhost",
                UserName = "guest",
                Password = "guest"
            };

            var rabbit = factory.CreateConnection();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

2)在本地PC上安装RabbitMQ并通过浏览到: http://localhost:15672来测试它的工作情况。我看到管理门户符合预期,因此它正在运行。

3) 运行控制台应用程序。它按预期运行并完成。

第 2 步 - 在 Docker 内运行

1) 右键单击​​控制台应用程序并选择:添加/容器编排支持。添加了 …

c# rabbitmq docker

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

IR(中间表示)的目的是什么

源代码可以直接转换为机器代码(100000)。那为什么我们需要将其转换为IR(Intermediate Representation)汇编语言呢?

如果我不能直接转换成机器语言,有什么优点和缺点?

compiler-construction assembly

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

将 std::invoke_result_t 与泛型 lambda 一起使用时出现硬错误

我有一个类似容器的类,其方法与std::apply. 我想使用const限定符重载此方法,但是当我尝试使用通用 lambda 调用此方法时,我从std::invoke_result_t. 我std::invoke_result_t用来推断方法的返回值以及对参数执行 SFINAE 检查。

#include <type_traits>
#include <utility>

template <typename T>
class Container
{
public:
    template <typename F>
    std::invoke_result_t<F, T &> apply(F &&f)
    {
        T dummyValue;
        return std::forward<F>(f)(dummyValue);
    }

    template <typename F>
    std::invoke_result_t<F, const T &> apply(F &&f) const
    {
        const T dummyValue;
        return std::forward<F>(f)(dummyValue);
    }
};

int main()
{
    Container<int> c;
    c.apply([](auto &&value) {
        ++value;
    });
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用 Clang 6.0 编译时的错误消息:

main.cc:27:9: error: cannot assign to …
Run Code Online (Sandbox Code Playgroud)

c++ sfinae generic-lambda c++17

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

从C调用C++函数返回char*

在MySQL中编写UDF时,我很难从c调用c ++函数,而c函数应该返回char *.我试过的是:

encrypt.cpp

string encrypt(string Data)
{
   ...
   //some encryption logic
   ...
   return encryptStr; //encryptStr is string 
}
Run Code Online (Sandbox Code Playgroud)

要从c调用上面的函数,我extern c在同一个文件中使用:

extern "C" char * c_encrypt(char *bar)
{
    std::string str = encrypt(std::string(bar));
    return what_to_do_to_return_char*;
}
Run Code Online (Sandbox Code Playgroud)

UDF.c

char* Encrypt_UDF( UDF_INIT* initid, UDF_ARGS* args, char* result, unsigned long* length, char* is_null, char* error )
{
    const char* arg = args->args[0];
    char * encryptData = c_encryt(arg); //calling c_encrypt()        
    return encryptData ;
}
Run Code Online (Sandbox Code Playgroud)

那么,我该怎么做c_encrypt()才能回来char *

c c++ mysql

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