48得票1回答
消除作为模板参数传递的重载成员函数指针的歧义

我正在尝试重现观察者模式,在其中我可以完美地将参数转发到观察者的给定成员函数。 如果我尝试传递具有多个重载的成员函数地址,则无法根据参数推断出正确的成员函数。#include <iostream> #include <vector> #include <algo...

41得票5回答
为什么char与signed char和unsigned char不同?

考虑以下代码:#include <iostream> #include <type_traits> int main(int argc, char* argv[]) { std::cout<<"std::is_same<int, int&gt...

41得票2回答
哪些 <type_traits> 不能在没有编译器钩子的情况下实现?

C++11提供了标准的&lt;type_traits&gt;。 哪些类型特性在没有编译器钩子的情况下是不可能实现的? 注1: 编译器钩子指任何非标准语言特性,如__is_builtin...。 注2: 许多类型特性可以在没有钩子的情况下实现(参见C++模板元编程的第2章和/或现代C++设...

39得票4回答
在编译时如何切换/选择类型?

在c++11中,是否有一种标准方法可以让我在无符号索引上进行编译时类型选择? 例如: using type_0 = static_switch&lt;0, T, U&gt;; // yields type T using type_1 = static_switch&lt;1, T, U...

39得票6回答
如何编写一个特性来检查一个类型是否可迭代

有没有办法检查任意变量类型是否可迭代? 所以要检查它是否具有索引元素或者我是否可以循环遍历它的子元素?(例如使用foreach?) 是否可能创建一个通用的模板来实现这个? 在搜索过程中,我找到了其他编程语言的技巧。但是还没有找到如何在C++中实现这个。

39得票8回答
查找C++对象是否可被调用

是否有可能编写一个类型特征,例如is_callable&lt;T&gt;,用于判断对象是否定义了operator()? 如果调用运算符的参数已知,则很容易,但在一般情况下不是这样。 我希望该特征仅在至少定义了一个重载的调用运算符时返回true。 此问题与此相关且具有良好的答案,但它不适用于所...

38得票5回答
编译器如何处理编译时分支?

编辑:我以“if/else”语句作为示例,说明有时可以在编译时解决问题(例如,当涉及静态值时,参见&lt;type_traits&gt;)。将下面的答案调整为其他类型的静态分支(例如,多个分支或多个条件分支)应该很容易。请注意,使用模板元编程进行编译时分支不是本文的主题。 在典型的代码中...

37得票5回答
std::is_integer和std::is_integral之间的区别是什么?

C++11提供了两个类型特征模板类:std::is_integer和std::is_integral。然而,我无法区分它们之间的区别。 什么类型(比如T),可以使std::is_integer&lt;T&gt;::value为true,同时使std::is_integral&lt;T&gt;...

36得票2回答
使用C++17能否检测一个结构体/类是否具有任何基类?

我需要一个类型特性,如果给定的类型派生自任何东西,则为真,否则为假。 例如: template&lt;class T&gt; struct is_inherit //... logic of inheritance detection ; template&lt;clas...

34得票2回答
何时lambda函数是微不足道的?

什么情况下lambda函数是保证为平凡的,如果有的话? 我假设只有当lambda函数捕获的变量类型都是平凡类型或者未捕获任何变量时,它才是平凡的。但我没有任何标准证明支持这一点。 我的动机是将一些代码从Visual C++ 12迁移到14,并发现处理我认为是平凡的lambda函数时,一些静...