草庐IT

c++ - 我可以在 Xcode 的消息/警告中打印预处理器值吗?

我想打印(在编译期间)消息告诉我Xcode5C++项目中的一些预处理器设置。我相信没有标准的方法可以做到这一点(我之前已经使用VC++中的技巧完成了)。如何让这段代码打印出__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__的实际值?#if__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__>=60000||__IPHONE_OS_VERSION_MIN_REQUIRED>=60000#defineOGRE_PLATFORMOGRE_PLATFORM_APPLE_IOS#else#defineOGRE_PL

c++ - 我可以在没有流对象的情况下调用流运算符重载吗?

假设我想throw带有包含有关某个对象的信息的字符串,但对象实现仅对流运算符()进行重载,而不是强制转换为字符串。我想做这样的事情:throwstd::runtime_error("Error,encounteredinvalidvalue"+x);哪里x是具有()重载的类型的实例。但是,上面的方法不起作用,因为+未重载为与constchar*兼容的类型.如果x是一个字符串(或可转换为一个字符串)它会起作用,但我必须这样做:std::stringstreams;s如何在不添加任何重载或自定义函数的情况下获得与第一个示例一样简洁的内容。标准库是否提供了一些有助于解决此问题的功能?

c++ - Qt 嵌套 ListView 或者我可以使用 TreeView

我正在做一个项目,我希望有这样的GUI:我有一个我的类列表(蓝色的),它有一个绿色类的列表,到目前为止我的C++结构很好,我可以在qml中从C++获取数据,反之亦然,但我不确定如何使GUI正常工作,我已经尝试使用嵌套的ListView,但似乎我无法从内部ListView访问外部ListView模型。我是qml的新手,昨天我找到了TreeView,但对我来说,它看起来只有在你有一个表结构时才有用。是否有一些我不知道的qml可以帮助我解决这个问题?我已经用嵌套的ListView尝试过这个,这个想法是内部ListView得到一个绿色类的对象作为模型。ListView{id:userViewa

c++ - 我可以在不复制的情况下将 std::vector<char> 重新解释为 std::vector<unsigned char> 吗?

我引用了std::vector我想用作接受std::vector的函数的参数.我可以不复制就这样做吗?我有以下功能并且有效;但是我不确定是否真的发生了复制-有人可以帮助我理解这一点吗?是否可以使用std::move以避免复制还是它已经没有被复制?staticvoidshowDataBlock(boolusefold,boolusecolor,std::vector&chunkdata){char*buf=chunkdata.data();unsignedchar*membuf=reinterpret_cast(buf);std::vectorvec(membuf,membuf+chun

c++ - 我可以用 Boost interval_map 做到这一点吗?

我想做的是有效地处理间隔。例如,在我的示例中,间隔如下所示:[10,20],[15,25],[40,100],[5,14]区间是封闭的整数,有些区间可能重叠。我想高效为给定查询找到重叠间隔。例如,如果给出[16,22]:[10,20],[15,25]上述区间应计算为重叠区间。我目前正在写一个基于红黑树的区间树(引用:CLRS,IntroductiontoAlgorithms)。虽然找到所有重叠间隔可以是O(n),但运行时间应该更快。请注意,可以删除和插入间隔。不过,我刚刚发现Boost有interval_map和interval_set:http://www.boost.org/doc

c++ - 我可以在 gdb pretty-print 中直接调用程序的 `operator[]` 吗?

我正在尝试使用GDB的pretty-print工具来显示自定义C++矩阵类。类(class)非常标准,您可以在任何地方找到。它是一个由类型参数化的模板,可以使用mat[i][j]等C类型符号访问。这首先隐式返回另一个表示行或列的模板“Slice”类,[]运算符可以再次访问它以提取数据。该类本身使用普通C数组进行存储,但它在其上实现了一些技巧,例如预分配更大矩阵的选项、启用非零开始、使用步幅等。该类没有native打印接口(interface),我无法修改它,也无法轻松链接到我自己的代码。自定义功能使得在Python中重现直接数据访问代码变得很痛苦。但那有必要吗?一般来说:为什么pret

c++ - 我可以从手动模板实例化中排除一些方法吗?

我们有复杂的模板类,其中有些方法不适用于某些策略或类型。因此,当我们检测到这些类型时(在编译时,使用类型特征),我们会触发一个带有良好消息的静态断言。现在我们也做很多手动模板实例化。部分原因是这些方法被迫编译器对方法进行语法检查。它还减少了库用户的编译时间。问题是静态断言总是被触发,因此我们无法手动实例化有问题的模板类。有解决办法吗?编辑:为了更清楚,这里有一个示例(在这种情况下,显式实例化将在someFunc1()上失败://headertemplateclasssomeClass{voidsomeFunc(){}voidsomeFunc1(){static_assert(false

c++ - 我可以在构造函数的初始化列表中执行完整性检查吗?

通常鼓励使用初始化列表。现在假设我有以下代码(只是为了使问题更清楚的简单示例):classfoo{public:foo(ptr1*a,ptr2*b):m_a(a),m_b(b),m_val(a->val){}/*codeandmembershere*/};在尝试取消引用它以获取val之前,我想检查a是否为NULL。有什么方法可以在那里执行完整性检查吗? 最佳答案 Usetheternaryoperator:#includeclassTest{intx;public:Test(int*px):x(px?*px:-1){printf("

c++ - 我可以在基元上调用 delete 吗?

我有一个模板化类myFoo,它存储类型T的“内容”,它可以是基本类型或指向复杂类型的指针。当myFoo被删除时,我想释放与它恰好存储的所有内容相关的所有内存。这意味着我需要在存储的每个指针上调用delete,但我最终也可能会在原语上调用delete。这样安全吗??我在下面包含了myFoo的草图,以更好地突出显示正在发生的事情。我不确定析构函数的行为是否定义明确。templateclassmyFoo{public:myFoo(intsize){size_=size;T*foo=newT[size_];}voidaddFoo(Ttmp,intindex){foo[index]=tmp;}v

c++ - 我可以从模板访问结构/类成员吗?

我想做的是创建一个接受任何类或结构(通过模板)的函数,同时让该函数假定传入的类或结构中始终有一个特定成员。在可能不正确的代码中,它看起来像这样:templateintdoSomething(inputTypevoxel){returnvoxel.density;}我希望它假定density成员将始终存在并且它将始终是int(或其他)。我可以这样做吗?如果是这样,如果density不存在会怎样?它会简单地抛出编译器错误吗? 最佳答案 这是完全合法的,C++中的模板无法与通过保留类型变量来检查泛型方法或类的不同方法(想想Java)相比。