小编val*_*ica的帖子

typeid(“”)!= typeid(const char *)

我正在制作一个C ++库,该库在很大程度上依赖于RTTI(到另一种语言的可自定义桥接),并且对字符串文字类型非常困惑。

这是我做的一个简单测试,用于显示问题:

std::cout << typeid(const char*).name() << std::endl; // PKc
std::cout << std::any("").type().name() << std::endl; // PKc
std::cout << typeid("").name() << std::endl;          // A1_c
Run Code Online (Sandbox Code Playgroud)

对我来说,它看起来像前两个打印出的类型const char*,但最后一个是数组。

为什么对结果std::any("").type()typeid("")不同?有没有办法获得第一个行为,即使字符串文字的结果一致(我使用类型标识来调用不同的类型处理程序)?

PS:在Ubuntu 19.04上使用Clang版本8.0.0-3(标签/ RELEASE_800 / final)进行测试。

c++ rtti string-literals c++17

14
推荐指数
1
解决办法
717
查看次数

CMake 中的 FindSDL2 发生了什么?

我在游戏中使用 SDL2。我一直在使用自定义 FindSDL2.cmake,因为标准 CMake 集中没有。但是,前段时间确实出现了有关 FindSDL2 的帖子。示例:Reddit 帖子

如果你的 cmake 足够新并且它有 FindSDL2.cmake 文件,你可以这样做:

find_package(SDL2 REQUIRED)
Run Code Online (Sandbox Code Playgroud)

但是当我下载最新的 CMake (3.13.2) 时,它不包含FindSDL2.cmake.

这是怎么回事?

cmake sdl-2

8
推荐指数
2
解决办法
9183
查看次数

Lib(s)uinput:使用多个按钮创建操纵杆

我找不到信息,如何使用uinput/ 创建带有几个按钮的操纵杆suinput.python使用示例python-uinput:

import uinput

def main():
    events = (
        uinput.BTN_JOYSTICK,
        uinput.ABS_X + (0, 255, 0, 0),
        uinput.ABS_Y + (0, 255, 0, 0),
        )

    with uinput.Device(events) as device:
        for i in range(20):
            # syn=False to emit an "atomic" (5, 5) event.
            device.emit(uinput.ABS_X, 5, syn=False)
            device.emit(uinput.ABS_Y, 5)
        device.emit_click(uinput.BTN_JOYSTICK)

if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

如您所见,在此示例中使用BTN_JOYSTICKas按钮.如何创建第二个按钮/上瘾两个ABS_X/ ABS_Y

注:我使用python为例,应用语言是Clibsuinput.

c linux uinput

7
推荐指数
1
解决办法
1409
查看次数

什么是timer_t在它的基础上?

Gcc并printf说这timer_t是指针(在我身上linux).但是这个指针放置了什么,并且是NULL一个有效的计时器ID?

此外,它是特定于平台的东西,例如它是指针on linux,int on macOs,sth.别的BSD.

types timer posix-api

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

将 std::regex 设为静态是个好主意吗?

我使用std::regex从字符串文字创建的内容,如下所示:

std::regex vowel_re("a|e|i|o|u");
Run Code Online (Sandbox Code Playgroud)

static为了节省施工时间甚至是这样做是个好主意吗static const?这个正则表达式很可能会被重用。

c++ regex static

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

是否可以在不创建fork的情况下更改子模块中的少量文件?

我正在创建cocos2d-x游戏并包含上游cocos fom git(它包括一些关键的修复和功能).但是,使用SDKBOX需要修补一些cocos文件(在子模块中).

是否可以将这些文件(甚至更好的补丁)包含到主存储库中?当然,可以分叉cocos2d-x存储库并在那里修补它们,但它使更新更加复杂(创建拉取请求并首先合并它).

git git-submodules

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

将 shared_ptr 与 FreeRTOS 队列一起使用

我使用 ESP-32 并且需要std::shared_ptr使用 FreeRTOS 队列通过。然而,它失去了一个链接。我认为这是问题的根源:

#include <iostream>
#include <memory>
#define PRINT_USE_COUNT(p) std::cout << "Use count: " << p.use_count() << std::endl;

extern "C" {
    #include <freertos/FreeRTOS.h>
    #include <freertos/task.h>
    #include <freertos/queue.h>
}

class testClass {
    public:
        testClass() {
            std::cout << "Class is constructed" << std::endl;
        };
        virtual ~testClass() {
            std::cout << "Class is destructed" << std::endl;
        };
};

struct container {
    std::shared_ptr<testClass> field;
};

extern "C" void app_main(void) {
    auto queue = xQueueCreate(1, sizeof(container));
    auto p = std::make_shared<testClass>();
    PRINT_USE_COUNT(p); // …
Run Code Online (Sandbox Code Playgroud)

c++ smart-pointers freertos

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

std :: function,文字类型和模板

我正在C ++ 17项目中,其中有以下定义(当然是在我的名称空间中):

using CppFunction = std::function<int(StatePtr&)>;

template<typename T>
using CppMethod = std::function<int(T*, StatePtr&)>;
Run Code Online (Sandbox Code Playgroud)

现在,我声明一些功能:

template<typename... Targs, typename F>
constexpr CppFunction CppFunctionNative(F func);

template<typename... Targs, typename F, typename T = (deducing class from F here) >
constexpr CppMethod<T> CppMethodNative(F func);
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,第一个声明会导致编译器错误Constexpr function's return type is not a literal type,但是第二个效果很好。

为什么会这样?它与第二个函数的返回类型是template的事实有关吗?

UPD:简化的独立示例:

#include <functional>

using CppFunction = std::function<int(int&)>;

template<typename T>
using CppMethod = std::function<int(T*, int&)>;

// Clang will complain
template<typename F>
constexpr CppFunction CppFunctionNative(F func) {};

// Clang will …
Run Code Online (Sandbox Code Playgroud)

c++ templates c++17

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