小编Sta*_*nny的帖子

从vibe.d同步执行std.process有时会静默挂起服务器

我写了一个vibe.dweb-UI clang-format,当使用LLVM样式时显示此输入时,服务器挂起.

处理POST的代码:

void post(string style, string code)
{
    import std.algorithm;
    import std.file;
    import std.conv;
    import std.process;
    auto pipes = pipeProcess(["clang-format", "-style="~style], Redirect.stdout | Redirect.stdin);
    scope(exit) wait(pipes.pid);

    pipes.stdin.write(code);
    pipes.stdin.close;
    pipes.pid.wait;

    code = pipes.stdout.byLine.joiner.to!string;

    string selectedStyle = style;

    render!("index.dt", styles, code, selectedStyle);
}
Run Code Online (Sandbox Code Playgroud)

这可能不应该以阻塞的方式完成,但我不知道如何异步地执行它.我已经尝试包装函数的内容runTask,但我找不到正确调用它的方法.

我怎样才能让它可靠?

d vibed

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

从一个类返回一个函数

我希望能够从类中返回一个函数,这样就不需要通过返回类型进行if-else操作。

我有一个返回多个字符串的类。相反,我想返回多个函数。

#include <iostream>

class Handler
{
private:

public:
    int handleMessage(int code)
    {
        return code+1;
    }

};

void func1();
void func2();
void func3();

int main (int argc, char *argv[])
{
    Handler handle;
    int code = handle.handleMessage(0);
    if(code == 1)
    {
        func1();
    }
    return 0;
}

void func1(){ std::cout << "1" << std::endl;}
void func2(){ std::cout << "2" << std::endl;}
void func3(){ std::cout << "3" << std::endl;}
Run Code Online (Sandbox Code Playgroud)

我想要的是:handleMessage类中的函数Handler返回某些内容,因此在我的主应用程序中,我不必使用if-else。

所以主要看起来像这样:

function = handle.handleMessage(0); 
Run Code Online (Sandbox Code Playgroud)

应用程序将选择它将运行的功能。例如:

function = handle.handleMessage(0);  //will …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

6
推荐指数
2
解决办法
276
查看次数

i + 1 &lt;vec.size()和i &lt;vec.size()-1之间的差异

进行编程时,我发现我的代码在使用条件时给出了运行时错误,i < vec.size() - 1但是对于来说可以正常工作i + 1< vec.size()。这里vec空无一人std::vector

//giving error
vector<int> vec;
for (int i = 0; i < vec.size() - 1; i++)
{
    //some code
}
//not giving error
vector<int> vec;
for (int i = 0; i + 1 < vec.size(); i++)
{
    //some code
}
Run Code Online (Sandbox Code Playgroud)

c++ size runtime-error

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

为什么int * ptr_arr_int = {1,2}; 在C / C ++中不起作用?

为什么int* ptr_arr_int = {1,2};会出现编译器错误,但char* ptr_arr_char = "amruth";编译正常?

int* ptr_arr_int = {1,2};         // ->ERROR
char* ptr_arr_char = "amruth";    // ->OK
Run Code Online (Sandbox Code Playgroud)

c c++ pointers

6
推荐指数
4
解决办法
228
查看次数

为什么我不能从迭代器构造一个 std::span ?

考虑一个大内存容器。在这个简单的例子中std::vector<int>

std::vector v = { 0, 1, 2, 3, 4, 5 };
Run Code Online (Sandbox Code Playgroud)

std::span允许我创建一个轻量级的内存视图。现在我想简单地打印跨度:

template<typename T>
void print(std::span<T> span) {
    std::cout << '[';
    if (span.size())
        std::copy(span.begin(), span.end() - 1, std::ostream_iterator<int>(std::cout, ", "));

    std::cout << span.back() << "]\n";
}

int main() {
    std::vector v = { 0, 1, 2, 3, 4, 5 };

    print(std::span{ v });
}

Run Code Online (Sandbox Code Playgroud)

输出:

[0, 1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

现在我想制作子集(这是std::span实际作为视图变得有用的地方)。我可以用迭代器来指定我的范围,并调用此构造函数(3)std::span

template< class It, class End >
explicit(extent != std::dynamic_extent) …
Run Code Online (Sandbox Code Playgroud)

c++ iterator c++20 std-span

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

CTAD,initializer_list,非显式构造函数和对函数的调用

基本上,我想要的是诸如multi_types之类的东西 std::initializer_list

template<typename ...As>
struct Foo {
Foo(As...){}
};

template<typename ...As>
void f(Foo<As...>) {}

int main() {
  f(Foo{5, 3.f}); // 1) compile
  f({}); // 2) compile
  f({5, 3}); // 3) error
  f({5, 3.8}); // 4) error
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我确实理解为什么第一个示例可以编译。但是,我不明白为什么第二个编译,而其他第二个却不编译。对我来说,如果第三个和第四个不编译,则第二个也不应该编译。有没有办法进行第三和第四编译?

c++ templates c++17

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

分配两个double是否保证产生相同的位模式?

这里有几篇有关浮点数及其性质的文章。显然,必须始终谨慎比较浮点数和双精度数要求平等的问题也已经讨论过,建议显然不要这样做。

但是,如果有直接分配,该怎么办:

double a = 5.4;
double b = a;
Run Code Online (Sandbox Code Playgroud)

假设a为任何非NaN值- a == b永远可以为假?

似乎答案显然不是,但我找不到在C ++环境中定义此行为的任何标准。IEEE-754声明具有相等(非NaN)位模式的两个浮点数相等。现在是否意味着我可以继续以这种方式比较我的双打而不必担心可维护性?我是否需要担心其他编译器/操作系统及其在这些方面的实现?还是编译器优化了一些位并破坏了它们的相等性?

我写了一个小程序,永久生成并比较非NaN随机双精度数-直到找到a == b产生yield 的情况false。我是否可以在将来随时随地编译/运行此代码,而不必期望暂停?(忽略字节序,并假定符号,指数和尾数位大小/位置保持不变)。

#include <iostream>
#include <random>

struct double_content {
    std::uint64_t mantissa : 52;
    std::uint64_t exponent : 11;
    std::uint64_t sign : 1;
};
static_assert(sizeof(double) == sizeof(double_content), "must be equal");


void set_double(double& n, std::uint64_t sign, std::uint64_t exponent, std::uint64_t mantissa) {
    double_content convert;
    memcpy(&convert, &n, sizeof(double));
    convert.sign = sign;
    convert.exponent …
Run Code Online (Sandbox Code Playgroud)

c++ floating-point language-lawyer

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

为什么 std::Optional Operator* 没有 has_value() 的调试模式断言?

我完全理解,由于性能原因,operator*instd::optional不会对所包含值的实际存在进行任何检查。然而,在调试模式下,性能考虑并不重要,并且在调试模式下应该做出某种断言对我来说很有意义。

Visual Studio似乎没有这样的断言(尽管我不确定其他编译器)。

我的问题是:编译器不会在调试模式下做出这样的断言是否有任何根本原因,或者它只是一个缺失的功能?

c++ visual-studio stdoptional

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

使用OpenCV4将鱼眼图像转换为等角矩形图像的C ++算法

我想用OpenCV4库创建C ++代码,该代码将鱼眼图像转换为等矩形图像。我正在使用从我的计算机上的文件加载的1400 * 1400像素的鱼眼图像作为测试:

鱼眼镜头

构建工作良好,但是当我尝试执行代码时,我得到了

细分错误:11

错误。我正在使用Xcode在MacOSX上工作,并且使用终端“ ITerm2”来构建和执行我的代码。

我使用此博客上描述的方法在等角矩形图像中查找鱼眼图像的相应点:http ://www.kscottz.com/dewarped-panoramic-images-from-a-raspberrypi-camera-module/

该方法可以这样描述:

图片

谢谢你的帮助。

#include <opencv2/opencv.hpp>
#include <iostream>
#include <vector>
#include <string.h>

using namespace cv;
using namespace std;

const string PATH_IMAGE = "/Users/Kenza/Desktop/Xcode_cpp_opencv/Projection/Projection/Images/img1.jpg";
const double PI = 3.141592653589793;
const int ESC = 27;

int main() {

    cout << "********** READ AND DISPLAY THE FISHEYE (=INPUT) IMAGE **********" << endl;
    Mat fisheyeImage;

    fisheyeImage = imread(PATH_IMAGE, IMREAD_COLOR);
    namedWindow("Fisheye Image", WINDOW_AUTOSIZE);
    imshow("Fisheye Image", fisheyeImage);

    while (waitKey(0) != ESC) {
        //wait until the key …
Run Code Online (Sandbox Code Playgroud)

c++ fisheye remap opencv4

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

C++ 中函数的关键字?

为什么 C++ 没有定义/声明函数的关键字?基本上该语言中的所有其他设计抽象都有一个 ( struct, class, concept, module, ...)。

它不会让语言更容易解析,也更一致吗?大多数“现代”语言似乎都这样(fn在 rust、funkotlin 中,......)。

c++ parsing language-design function keyword

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