小编KKl*_*zal的帖子

CPPRestSDK(casablanca)从传入的WebSocket消息中提取JSON(格式错误的令牌)

我正在连接一个总是以JSON回复的WebSocket.我看到有一种extract_string方法,websocket_incoming_message但是在尝试了很多东西后json:value,似乎你只能通过逐个插入键值对来实时构建JSON数组.我在这里遗漏了什么或有没有办法从输出中websocket_incoming_message直接将其转换为json:value数组?

    wsClient.set_message_handler([=](websocket_incoming_message msg)
    {
        // handle message from server...
        printf("[WebSocket INBOUND]: %s", msg.extract_string().get().c_str());
        printJSON(json::value::parse(conversions::to_string_t(msg.extract_string().get())));
    });
Run Code Online (Sandbox Code Playgroud)

printJSON遍历json::value并打印每个键值对.

RestAPI.exe中0x00007FF866923FB8处的未处理异常:Microsoft C++异常:内存位置0x0000003E553FDDC0处的web :: json :: json_exception.发生了

控制台输出:

[WebSocket INBOUND]:{"t":null,"s":null,"op":10,"d":{"heartbeat_interval":41250,"_ trace":["gateway-prd-main-cr3x"] }}

即使我们可以编译并运行应用程序,我认为由于传递包含JSON表而不是单个元素的字符串这一事实导致异常?这是否意味着我需要手动解析字符串并拉出每个键值对,同时构建json数组?

必须有办法做到这一点,它似乎是基本需要的功能..

一个类似未解决的问题

这里的任何帮助将不胜感激!感谢您的时间.

c++ json websocket casablanca cpprest-sdk

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

归一化从OpenGL到Vulkan的UV坐标

我正在为GWEN(无多余废话的GUI)编写Vulkan渲染器,但在获取纹理坐标以匹配时遇到问题。

这是我应该看到的: 正确的输出

这是当前正在发生的事情: 输出错误

中间显示的纹理是我们用于GUI的图像,我确保将其渲染到四边形以确保正确加载。

GUI的结构似乎是正确的,这使我相信UV坐标不正确。特别是Y坐标,因为据我所知X看起来还可以。

void Vulkan::AddVert(int x, int y, float u, float v)
{
    vertices.emplace_back();

    vertices.back().pos.x = ((float)x / 400) - 1.f;
    vertices.back().pos.y = ((float)y / 300) - 1.f;
    //  Our image is 512x512 px
    vertices.back().texCoord.x = (u / 512.0f);
    vertices.back().texCoord.y = 1.0f - (v / 512.0f);
}

void Vulkan::DrawTexturedRect(Gwen::Texture* pTexture, Gwen::Rect rect, float u1, float v1, float u2, float v2)
{
    //  ToDo: Implement textures through GWEN
    //  The GUI texture is hardcoded for now
    // …
Run Code Online (Sandbox Code Playgroud)

c++ opengl normalize uv-mapping vulkan

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

创建全局C++对象

我有一个对象需要是"全局的",在某种意义上我需要能够从我的其他类.h和.cpp文件中访问它.我不确定如何处理这个,所以让我更详细地描述一下这个问题.

我有一个名为CoreEnvironment的类.这个类将我的引擎的核心保持在它的最低级别,例如:渲染,网络,物理和路径查找.这个类中只有一个实例可以同时存在,并且它存在于应用程序的整个生命周期中.我的第一个想法是创建它作为一个单身人士,但在做研究后,有很多关于使用单身人士的负面评论,我也不完全理解如何创建一个.在我的研究中,我看到了"Extern"关键字的使用,但我对它的用法不清楚.

这是该类的骨架:

class CoreEnvironment
{
    NetHandler* m_NET;
    NetPoint* Server;
    PhysicsHandler* m_Physics;
    irr::IrrlichtDevice* Device;
    irr::ITimer* Timer;

public:
    CoreEnvironment();
    ~CoreEnvironment();

    bool RunDevice();
    void Update();
} CoreEnv;
Run Code Online (Sandbox Code Playgroud)

我的引擎中有一些更高级的类,例如:ActorHandler和WorldHandler.在这两个类的.cpp文件中,我需要访问CoreEnv.如果我只是#include"CoreEnvironment.h",每次包含该文件时都会创建另一个CoreEnv实例,但我需要访问已初始化的原始实例.

整个结构可能是不正确的方法.任何有关解决此问题或更有效方法的提示或建议都非常感谢.感谢您的时间.

c++ singleton global-variables extern c++11

2
推荐指数
1
解决办法
1227
查看次数

多个线程可以读取同一个类成员变量吗?

多个线程可以安全地读取同一个类成员变量而不产生竞争条件吗?

class foo {
    int x;
};

void Thread1(foo* bar) {
    float j = bar->x * 5;
}

void Thread2(foo* bar) {
    float k = bar->x / 5;
}
Run Code Online (Sandbox Code Playgroud)

因此,例如,如果我们有两个线程正在运行,Thread1并且Thread2. 如果每个线程都传递同一个 foo对象,它们是否可以独立运行,没有竞争条件,因为我们只是读取变量而不是写入?还是访问对象的行为使整个事情变得不安全?

如果以上安全的,第三个线程是否可以安全地写入同一个foo对象,只要它不接触foo::x

#include <thread>

class foo {
public:
    int x = 1;
    int y = 1;
};

void Thread1(foo* bar) {
    int j;
    for (int i = 0; i < 1000; i++) {
        j = …
Run Code Online (Sandbox Code Playgroud)

c++ thread-safety

2
推荐指数
1
解决办法
625
查看次数

编译错误C2662

我正在尝试传递一个对象作为对一个接受该对象作为const的函数的引用,但编译器正在抛出:

error C2662: 'const int DataPacket::GetData(void)': cannot convert 'this' pointer from 'const DataPacket' to 'DataPacket &'
Run Code Online (Sandbox Code Playgroud)

智能感知说:

the object has type qualifiers that are not compatible with the member function
    object type is: const DataPacket
Run Code Online (Sandbox Code Playgroud)

我对代码进行了测试以演示该问题:

#include <iostream>
#include <functional>

class DataPacket
{
    int SomeVar;
public:
    DataPacket(int InitialData)
    {
        SomeVar = InitialData;
    }

    const int GetData()
    {
        return SomeVar;
    }
};

void ProcessPacket(const DataPacket& Packet)
{
    std::cout << Packet.GetData() << std::endl;
}

int main()
{
    std::function<void(const DataPacket& Packet)> f_Callback;
    f_Callback …
Run Code Online (Sandbox Code Playgroud)

c++ const pass-by-reference c++11

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

如何使用 Vulkan 绘制标准基元

Vulkan 是否提供绘制基本图元的功能?点、线、矩形、实心矩形、圆角矩形、实心圆角矩形、圆、实心圆等。 ?

我不相信有任何 VkCmdDraw* 命令提供此功能。如果这是真的,需要做什么来绘制这样的简单图元?

vulkan

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

向量Push_Back VS Emplace_Back

我有两种将向量元素添加到向量的方法。

GUI_Vertices.emplace_back();

GUI_Vertices.back().pos.x = ((float)x / 400) - 1.f;
GUI_Vertices.back().pos.y = ((float)y / 300) - 1.f;
GUI_Vertices.back().texCoord.x = u;
GUI_Vertices.back().texCoord.y = v;
GUI_Vertices.back().color.r = m_Color.r / 128;
GUI_Vertices.back().color.g = m_Color.g / 128;
GUI_Vertices.back().color.b = m_Color.b / 128;
GUI_Vertices.back().color.a = m_Color.a / 128;
Run Code Online (Sandbox Code Playgroud)

上面的代码有效,但是我被迫向GUI_Vertices向量添加一个新元素。

Vertex NewVertex;

NewVertex.pos.x = ((float)x / 400) - 1.f;
NewVertex.pos.y = ((float)y / 300) - 1.f;
NewVertex.texCoord.x = u;
NewVertex.texCoord.y = v;
NewVertex.color.r = m_Color.r / 128;
NewVertex.color.g = m_Color.g / 128;
NewVertex.color.b = m_Color.b …
Run Code Online (Sandbox Code Playgroud)

c++ memory-management stdvector vulkan

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