小编Jan*_*cek的帖子

如何检测类型是迭代器还是const_iterator

我想知道,如果有一种方法可以在编译时检查某个迭代器类型的类型T是否为const_iterator.迭代器和const迭代器之间的迭代器定义的类型(value_type,pointer,...)有什么不同吗?

我想实现这样的目标:

typedef std::vector<int> T;

is_const_iterator<T::iterator>::value       // is false
is_const_iterator<T::const_iterator>::value // is true
Run Code Online (Sandbox Code Playgroud)

c++ templates iterator stl metaprogramming

14
推荐指数
4
解决办法
2137
查看次数

在模块之间共享内存

我想知道如何在不同的程序模块之间共享一些内存 - 比方说,我有一个主应用程序(exe),然后是一些模块(dll).它们都链接到同一个静态库.这个静态库将有一些管理器,它提供各种服务.我想要实现的是在所有应用程序模块之间共享此管理器,并在库初始化期间透明地执行此操作.在进程之间我可以使用共享内存,但我希望这只在当前进程中共享.你能想到一些跨平台的方式吗?可能使用boost库,如果它们提供了一些设施来执行此操作.

我现在只能想到的解决方案是使用相应操作系统的共享库,所有其他模块将在运行时链接到该库,并将管理器保存在那里.

编辑:澄清我实际需要的东西:

  1. 我需要找出,如果已经创建了共享管理器(下面的答案已经提供了一些方法)
  2. 获取指向管理器的指针(如果存在),或将指针设置在新创建的管理器对象的某处.

c++ memory module

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

带模板类型的模板化模板参数列表

C++允许模板化的模板参数,如下所示:

template <template <bool> class T>
struct something1 {};
Run Code Online (Sandbox Code Playgroud)

Bool类型可以用typedef替换(因此不需要在声明中出现原始类型名称):

typedef bool bool_t;
template <template <bool_t> class T>
struct something2 {};
Run Code Online (Sandbox Code Playgroud)

这很好用,但如果我尝试定义这样的嵌套结构:

template <typename Type>
struct enclosing
{
   typedef bool bool_t;
   typedef Type type_t; 

   template <template <bool_t> class T>
   struct something3 {};

   template <template <type_t> class T>
   struct something4 {};
};
Run Code Online (Sandbox Code Playgroud)

然后以下代码无法编译:

template <bool Value>
struct param {};

typedef something1<param> x1; // ok
typedef something2<param> x2; // ok
typedef enclosing<bool>::something3<param> x3; // ok
typedef enclosing<bool>::something4<param> …
Run Code Online (Sandbox Code Playgroud)

c++ templates metaprogramming template-meta-programming

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

在C++中处理CPU异常

是否有一种跨平台的方式来处理CPU异常,如分段错误或除零?可以说,我需要调用一些可能不安全的函数(例如来自插件文件),这可能导致段错误,或者在执行之前我无法测试的其他一些问题.我知道,C标准库有信号处理功能,但我不知道如何使用它们来处理问题以避免程序终止(我猜,我不能只是在有问题的函数执行之前跳转到该位置,或者我可以?).在Windows下我可以使用SEH异常处理程序,但我无法在Linux或任何其他操作系统下执行此操作.如何使用我自己的异常处理程序来处理这些问题,Windows/Linux之间的差异有多大?这是否可能(通过汇编程序 - 让我们说只是在x86平台上)?

我主要是出于好奇,我不是想解决现有的问题.谢谢

c++ cpu signals exception

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

在Xcode调试器中自动显示C++对象的属性

Xcode调试区域有时可以显示列表中对象内部最重要变量的摘要,而无需展开对象以查看其个别成员.

有没有办法让我教我的调试器关于我自己的C++对象做同样的事情?假设我有一个带有单个成员变量的简单类:

class Foo
{
    int bar;
};
Run Code Online (Sandbox Code Playgroud)

调试区域应显示如下内容:

aVariableOfTypeFoo = (Foo) bar=123
Run Code Online (Sandbox Code Playgroud)

我知道有些C++对象能够做到这一点(例如std :: vector显示它的大小),但我无法弄清楚这是否可以配置,或者它是否内置于调试器/ Xcode本身.

我正在使用Xcode 5.0.1

谢谢

c++ debugging xcode ios

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

执行明确默认的特殊成员函数生成

在C++ 11中,如果自动阻止了隐式生成,则可以显式地默认特殊成员函数.

但是,显式默认默认特殊成员函数只会撤消由于手动声明某些其他特殊成员函数(复制操作,析构函数等)而导致的隐式删除,它不会强制编译器生成函数,并且代码被认为是即使实际上不能生成函数,也要很好地形成.

请考虑以下情形:

struct A
{
    A ()         = default;
    A (const A&) = default;
    A (A&&)      = delete;  // Move constructor is deleted here
};

struct B
{
    B ()         = default;
    B (const B&) = default;
    B (B&&)      = default; // Move constructor is defaulted here

    A a;
};
Run Code Online (Sandbox Code Playgroud)

B中的移动构造函数不会由编译器生成,因为这样做会导致编译错误(删除A的移动构造函数).在没有明确删除A的构造函数的情况下,B的移动构造函数将按预期生成(复制A,而不是移动它).

试图移动这样的对象将默默使用复制构造函数:

B b;
B b2 (std::move(b)); // Will call B's copy constructor
Run Code Online (Sandbox Code Playgroud)

有没有办法强制编译器生成函数或发出编译错误,如果它不能?如果没有这种保证,如果单个已删除的构造函数可以禁用整个对象层次结构的移动,则很难依赖默认的移动构造函数.

c++ xcode clang c++11

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

如何为UIImage的drawAsPatternInRect指定图像偏移量

当使用UIImage类的drawAsPatternInRect时,是否可以指定图像的初始偏移量?

澄清我实际需要的东西:假设我使用drawAsPatternInRect在视图的中心绘制图像.现在,如果我移动这个矩形区域,绘制的背景仍然填充整个区域,但它的坐标是固定的,即它们不随矩形移动,这使得它看起来像绘图区域只是一些透明的"窗口"静态背景.我想要实现的是让它看起来像背景与区域本身一起移动.

我尝试过使用这里描述的功能,但我没有取得多大成功.

任何帮助都会非常受欢迎.

drawing objective-c uiimage ios

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