小编che*_*989的帖子

我应该在Xcode中使用"#pragma GCC ..."或"#pragma clang ..."

我应该使用以下哪些来忽略警告?

#pragma clang diagnostic ignored "-W<warning>"
#pragma GCC diagnostic ignored "-W<warning>"
Run Code Online (Sandbox Code Playgroud)

两者似乎对我有用,但是哪一个是正确使用的?

我应该总是使用与我正在使用的编译器匹配的那个吗?

gcc pragma clang c-preprocessor

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

cmake 仅包含头文件库

我想将spdlog包含到我的项目之一中。它是一个只有标头的库。我正在构建的项目正在使用 cmake。目前我正在使用

include_directories('src/logger/spdlog/')
Run Code Online (Sandbox Code Playgroud)

在 cmake 中并将库包含为

#include <spdlog/spdlog.h>
Run Code Online (Sandbox Code Playgroud)

在记录器文件夹内的logs.h中。我收到致命错误,没有这样的文件或目录。在我的应用程序中包含相同库的正确方法是什么?

c++ cmake spdlog

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

线与球体之间的交点

我试图找到一个球体和一条线之间的交点,但老实说,我不知道该怎么做.有人可以帮我这个吗?

math geometry intersection

7
推荐指数
3
解决办法
2万
查看次数

如何在线程中使用v8?

我试图在一个不是主线程的线程中使用来自c ++的v8.就v8而言,没有多线程,所有v8对象都在该线程中创建和销毁.什么都没有并行运行,没有任何共享.当我从主线程运行我的程序时,一切正常.当我在另一个线程中有v8内容时,在创建v8 :: HandleScope时出现分段错误.

我找不到任何关于如何使用v8实际处理线程的有用文档.搜索时会经常弹出"使用隔离和锁定器"的指令,但我找不到任何关于如何完成此操作的示例.在v8 :: Isolate上有这个API文档,但该页面上没有任何内容告诉我在特定情况下是否需要它们(我不共享内存或并行执行).v8 :: Locker()上的文档甚至没有关于该类的信息.项目中包含的样本也不涉及任何此类样本.

所以我的问题是......

  • 我需要在这里使用隔离物和/或储物柜吗?
  • 我能得到一个如何使用它们的最小例子吗?即使是伪代码或其他东西也会非常有用

c++ multithreading v8

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

将元素插入到已排序的向量中并保持元素的排序

所以我有一个向量,我希望元素始终排序.我应该如何将元素插入到该向量中,并在弹出它们时保持元素排序.std::lower_bound然而,我调查了与我想要的相反的东西.

例如,这就是我想要的:当我弹出向量中的所有元素时,它应该是:1 2 3 4 5.这意味着向量必须将它们存储为5 4 3 2 1.如果使用下限,则向量将它们存储为1 2 3 4 5,并将其弹出为5 4 3 2 1.此外,将传入一个比较仿函数,以便该lower_bound函数使用比较仿函数.有没有办法与比较仿函数相反?

c++ sorting vector insertion-sort

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

创建不同的 v8 上下文,它们是另一个上下文的克隆

使用 Google 的 v8 c++ 库,我想创建一个上下文,其中定义了多个模板、变量和全局变量,并准备好供代码中的多个地方使用,这些地方可能运行在不同的线程上,每个地方都有自己的隔离,它们也应该在这里每个线程都有自己的本地上下文副本,因此对一个线程中全局变量的任何更改都不会影响其他线程。

每次我想要一个新的上下文时,我都可以通过显式设置我的所有模板、变量和全局变量来做到这一点,但我想知道是否有更有效的方法。假设我已经有一个代表主状态的全局 v8::Isolate 指针和 v8::Persistent。如果我想在自己的线程中创建一个全新的隔离,并创建一个本质上是 master 克隆的新上下文,那么我需要做什么?我知道我可以在对 master 的访问周围包装一个互斥锁,以确保不同的线程在必要时不会同时访问它。我只是不知道如何有效地将在一个隔离中创建的信息复制到另一个隔离中,而无需从头开始重新创建其全部内容。

c++ multithreading v8 embedded-v8

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

当我从信号处理程序调用非异步安全函数时,它总是不安全吗?

我只是想知道是否可以在信号处理程序中调用非异步安全函数。
引用 Linux 手册页 signal(7):

如果信号中断不安全函数的执行,并且处理程序调用不安全函数,则程序的行为是未定义的

TLPI

SUSv3 指出,表 21-1(异步安全函数列表)中未列出的所有函数都被认为对于信号而言是不安全的,但指出只有当信号处理程序的调用中断了某个函数的执行时,该函数才是不安全的。不安全函数,并且处理程序本身也调用不安全函数

我对上面引用的解释是,只有当信号处理程序没有中断非异步安全函数时,从信号处理程序调用非异步安全函数才是安全的

例如,我安装了一个 SIGINT 处理程序,它调用一个不安全的函数,crypt(3)该函数被认为是不可重入的,即不安全的。

sigemptyset(&sa.sa_mask);
sa.sa_flags = SA_RESTART;
sa.sa_handler = handler;
sigaction(SIGINT, &sa, NULL);
Run Code Online (Sandbox Code Playgroud)

我还在printf()中调用了无限循环main(),并且只运行主线程。

printf()问题是对于这个简单的例子,当处理程序中断执行并调用不安全函数时,我没有看到任何不好的事情发生。AFAK,printf()将获取控制台锁并具有内部缓冲区来执行缓冲 I/O,但其状态在本例中是一致的。虽然crypt()返回一个静态分配的字符串,但它不与其他函数或线程共享。

我误解了什么吗?我希望有人澄清一下,让信号处理程序中断主程序中不安全函数的执行并且本身也调用不安全函数总是不安全的,或者在某些情况下这样做是安全的(例如上面的简单示例

c linux signals async-safe

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

C++指向const指针的const数组的指针

我已经创建了const指针的const数组,如下所示:

const char* const sessionList[] = {
    dataTable0,
    dataTable1,
    dataTable2,
    dataTable3
};
Run Code Online (Sandbox Code Playgroud)

这个数组的常规非const指针的正确语法是什么?我以为会是const char**,但编译器认为不然.

c++ arrays pointers

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

如何读取包含中文字符的UTF-8编码文件并在控制台上正确输出?

我正在编写一个网络爬虫来获取一些中文网络文件.获取的文件以utf-8编码.我需要读取这些文件来进行一些解析,例如提取URL和中文字符.但我发现当我将文件读入std :: string变量并将其输出到控制台时,中文字符变为垃圾字符.我将boost :: regex应用到std :: string变量中,并且可以提取除中文字符之外的所有URL.

我怎样才能解决这些问题?

PS我的CPP文件默认编码为ANSI,操作系统为Win8中文版;

c++ utf-8 readfile chinese-locale

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

将矢量分配给单个元素

考虑std::vector<T>某种类型T.我收到一个指向这种类型的指针到函数中,也是一个实例T; t说.

我的功能看起来像这样:

void bar(std::vector<T>* foo, const T& t)
{
    foo->clear();
    foo->push_back(t);
}
Run Code Online (Sandbox Code Playgroud)

有没有办法在一个语句中编写函数体?*foo = t;由于不存在适当的赋值运算符而无法工作.我也在考虑使用

foo->assign(&t, &t + 1);
Run Code Online (Sandbox Code Playgroud)

但那似乎很顽皮.

我正在使用C++ 11.

c++ stdvector c++11

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