小编Man*_*ork的帖子

有没有办法执行"if(condition)typedef ..."

typedef当且仅当满足编译时条件时,我想执行a .如果不满足条件,则根本不typedef执行任何操作.

这可能在C++ 11中吗?

例:

class A {
  std::conditional_typedef<true,int,myType1>; // Performs "typedef int myType1".
  std::conditional_typedef<false,int,myType2>; // Does nothing at all.
};
Run Code Online (Sandbox Code Playgroud)

我正在寻找这个虚构的std::conditional_typedef.

c++ templates typedef c++11

17
推荐指数
2
解决办法
3098
查看次数

为什么没有人编写 ncurses 库的线程安全分支?

NCurses 似乎是一个流行的库。它的弱点之一是它不是线程安全的。将共享资源包装在互斥体中应该不难。

是否有具体原因,为什么没有人启动线程安全分支?(法律问题、引入平台依赖性……)

编辑:我的意思不是 use_screen 或 use_window 函数。这些显然要求用户更改其基于 NCurses 的代码。应该可以向 NCurses 本身内的共享资源添加互斥体,并且所有访问函数在对窗口执行某些操作之前都会获取互斥体。我在 NCurses 中想象这样的事情:

#if __cplusplus >= 201103L
#include <mutex>
#define THREADSAFE
#endif
...
#ifdef THREADSAFE
std::recursive_mutex  mxCurscr;
#endif
...
int doupdate(void)
{
#ifdef THREADSAFE
mxCurscr.lock();
#endif
... // <-- Access the screen here.
#ifdef THREADSAFE
mxCurscr.unlock()
#endif
}
Run Code Online (Sandbox Code Playgroud)
  • 除了 C++11 标准之外,这不依赖于任何其他标准。
  • 这与较旧的编译器兼容。(但那时就没有线程安全了。)
  • 进行修改的时间不应超过一两天。
  • 这满足了线程安全 NCurses 的需求。
  • NCurses 库的用户将不必费心。
  • 这项工作是为所有用户一次性完成的,而不是让每个用户实现自己的线程安全。

那么,问题在哪里呢?

ncurses thread-safety

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

在Type :: var的情况下,范围解析运算符返回什么?

请考虑以下示例:

class A { int x; };
Run Code Online (Sandbox Code Playgroud)

现在是什么A::x

  • 它不能是左值,因为它不引用存储位置.
  • 它不能是一种类型,因为类型会是decltype(A::x).

c++ scope operators member c++11

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

ncurses: Subwin 或 pad 的 subpad

假设有一个 ncurses pad。

1.) 我可以创建pad 的子窗口吗?理论上,subwin 会与 pad 共享内存。但是当我调用这个子窗口时会发生什么wrefresh

2.) 我可以创建pad 的子 pad吗?wrefresh如果是,拨打电话或prefresh在副台上有意义吗?

我目前的理解是,必须为 pad 创建一个 subpad。传递给subpad函数的坐标指定(父)焊盘的位置。返回的子板在概念上是一个窗口(不能大于其父结构),尽管它必须使用该prefresh函数放置到屏幕上。它与父垫共享内存。正确的?

c ncurses

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

标签 统计

c++ ×2

c++11 ×2

ncurses ×2

c ×1

member ×1

operators ×1

scope ×1

templates ×1

thread-safety ×1

typedef ×1