问题标签 [typetraits]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C++ - 类型特征问题
我想知道在 C++ 中是否有可能以某种方式处理以下情况:
情况1) (容易处理)
现在假设我们想要一些编译时断言,并且我们想要检查任意类型是否typename T
对Facility
. 这很简单:
情况2) (???)
现在让我们假设在同样的情况下我们只有我们的模板类:
显然我们不能使用与情况一相同的解决方案,因为我们不能编写statement<Facility, T>
(Facility
本身就是一个模板)。
那么,有没有一种方法(可能是肮脏的,涉及丑陋的演员表,特定于对齐方式,任何可能有效的方法)来检查 someT
实际上是否等于 sometemplate type
而无需引入特定的空(辅助)基类(因为有时你根本不能)?
谢谢你。
c++ - 将 boost 序列化与虚拟基类一起使用时,是什么导致 C4250(类通过支配地位继承成员)?
VC++ 编译器警告C4250的含义对我来说很清楚。(但请参阅此处以获取解释。) 'class1' : inherits 'class2::member' via dominance
我目前遇到的问题是在序列化具有带有 boost::serialization (1.44.0)的抽象基类的类层次结构时收到此警告。
请注意,我的类 没有形成任何可能导致此警告的菱形继承层次结构,但该警告是由boost::detail::is_virtual_base_of_impl<...>
序列化派生类实例时的实例化引起的。(这似乎是使用来自 Boost.TypeTraits 的is_virtual_base_of 。)
这是在 Visual Studio 2005 上重现警告的最小代码示例。请注意,代码应按原样放置到一个 cpp 文件中,并且应该可以编译。
还要注意代码中我用触发警告的注释标记的两点。如果BOOST_CLASS_EXPORT
未使用,则不会触发警告,但更有趣的是,如果派生类不使用继承,也不会触发警告!(所以也许我毕竟不了解C4250。)virtual
这是编译器警告(啊!):
c++ - C++ STL type_traits 问题
我正在观看最新的C9 讲座,并注意到一些有趣的事情。
在他对 type_traits 的介绍中,Stephan 使用了以下(如他所说,人为的)示例:
p>这似乎远比:
p>后一种方式有问题吗?他的方式更好吗?为什么?
谢谢。
c++ - 获取函数的结果类型
我想专门声明一个模板函数:
然后我有很多静态实现
aso 现在我想做一个宏,以便读取的专业化非常简单:
所以我想我会采用 boost::function_traits 的方式并将 SPECIALIZE_READ 声明为:
但 VC++ (2008) 编译器抱怨:'boost::function_traits':'read_integer' 不是参数'Function' 的有效模板类型参数
想法?
c++ - 将 std::sort 限制为随机访问迭代器
我只是想知道,既然您无论如何只能将随机访问迭代器传递给std::sort
,为什么不首先为随机访问迭代器定义它来强制执行该限制呢?
我发现单行错误消息比实现中的类型错误导致的页面和页面更容易阅读。
你可以对其他算法做同样的事情。标准的 C++ 核心语言对于这项任务的表现力已经足够了,对吧?那么,没有这样做的任何特殊原因?
c++ - 如何 typedef 嵌套容器的迭代器?
在以下代码中声明迭代器 i 的正确方法是什么?
c++ - C++ 类/结构数据成员偏移量作为常量表达式
获取数据成员的偏移量就像这样简单:
我想让它成为一个常量编译时表达式(或使用类型特征)。例如,要使用它来实现使用成员偏移量的基于 SFINAE 的解决方案,使用它静态断言等。
更新:问题是 - 如何使其成为编译时表达式。不是它是否适用于 POD 类型,或者 C 库中是否有标准宏等。
c++ - C++ is_trivially_copyable 检查
如何检查 C++ 类型是否可以轻松复制?我有一个类,它使用具有指定模板类型 T 的 memcpy 和 memcmp 函数,我想为类型触发断言,使用 memcpy 复制这些类型是不安全的。有没有办法做到这一点(使用现有标准)?
c++ - 删除 char 类型的 un-/signed
我想专门为 char、short、long 和 long long 编写一个类模板。这种特化也应该适用于整数类型的有符号和无符号变体。
我知道 boost 库和 std::tr1 / C++0x 实现了 is_signed/is_unsigned 和 make_signed/make_unsigned type_traits。但是如何从 char 类型中删除任何带符号的规范(注意:签名 itype 的唯一整数类型!= itype)?
c++ - 成员运算符的 C++ enable_if(或解决方法)
如果 T = void 那么我不想实现 operator*()。我怎样才能做到这一点?我不想专攻这门课,因为我的课还有很多其他的方法。
PS:请注意,这只是解释我的问题的一个例子。