假设我有一个 function 或一个 class 模板,它应该只适用于某些类型,例如std::wstring和std::string 。 我知道概念可以用来对模板施加约束,所以我会使用这样的东西:template <typename T> concept StringLike = st ...
假设我有一个 function 或一个 class 模板,它应该只适用于某些类型,例如std::wstring和std::string 。 我知道概念可以用来对模板施加约束,所以我会使用这样的东西:template <typename T> concept StringLike = st ...
此问题中的代码基于此答案。 我对它如何产生 output 以及它是否都定义良好感到有点困惑 Output 与 gcc (与 clang 和 msvc 相同): 如果is_fooable_v<moo>为false ,则 SFINAE 不会丢弃foo模板,然后moo为“fooable”, ...
我正在关注 SPJ 的“实现函数式语言:教程” ,我坚持练习 2.18(第 70 页),转载如下。 这是关于书中描述的简单惰性函数语言的模板实例化评估器的章节(类似于迷你 Miranda/Haskell): 练习 2.18。 为什么很难将case表达式引入模板实例化机? (提示:想想instan ...
在默认成员初始值设定项中使用是否仍然是 odr-use,即使默认成员初始值设定项未被任何构造函数使用? 例如,这个程序是否格式错误,因为g<A>是 odr-used 并且因此它的定义被隐式实例化? MSVC 认为不。 Clang、GCC 和 ICC 认为是的。 https://g ...
这是这个问题的后续: Does PIMPL idiom actually work using std::unique_ptr? 完整的例子使用了多个文件,所以为了这个问题我将在这里减少它。 完整的工作示例在这里: https://wandbox.org/permlink/AepAJYkbRU4b ...
以下代码编译良好: 但是如果我在命名空间中定义 f()s,例如通过取消注释上述代码,那么编译器会生成一个错误: 这是为什么? ...
我有一个方法(在 class A 中)有很多不同的重载,我正在制作一个从 A 继承的 class B,改变方法的行为以在执行它最初的操作之前执行某个操作。 问题是必须对所有重载进行此更改,这可以使用模板来完成。 实际上这确实有效,但是使用模板意味着将方法的新代码放在 class 声明中(即在标题中) ...
所以我有一个 class 模板,例如模板.h 我将float和double特化分成不同的.h文件浮动.h 和双倍.h 我将这三个文件按顺序包含在我的.cpp文件中,它工作正常但我需要将另一个 function 添加到将Something作为参数的float专业化 然后在template.h之后包含D ...
我想防止编译器使用extern template隐式实例化某些模板。 以下片段按预期工作( static_assert不会触发):template<typename T> void f() { static_assert(sizeof(T) == 0, "f()"); }; ...
从上一个示例中,我在这里发布了有关何时实例化template的信息? ,我得到的答案是,只有在使用模板时,编译器才会实例化它。 但是看看这个例子: 如您所见,我已经声明了一个显式模板实例化Pow<int>但尚未定义它。 该程序运行良好,并且不会抱怨缺少Pow<int> ...
template在使用之前不会实例化的事实,例如,如果我有这个类模板: 那么模板究竟是什么时候实例化的呢? 那么Pow<int>是否在声明func(Pow<int>)时实例化? 如果我没有在main()使用Pow<int>那么它是否因为它在fun ...
当我开始对 C++1x 特性进行更深入的试验时,我遇到了一些想法。 例如当有这个构造template<unsigned int N> unsigned int functionForTest(const char (&a)[N]); 以及它的用法 functionForTest( ...
我试图编写一个 class ,它将用容器具有的类型填充随机数的容器: 但是这里某处发生了错误,因为当我调用 std::generate 时,我得到了很多错误: 我认为这可能是因为if constexpr但如果只是离开: 然后仍然返回相同的错误。 这是我得到的错误列表: function 调用如下 ...
这是对这个问题的跟进。 最初的案例是另外一回事,但在我写一个糟糕的答案和 OP 澄清的过程中,事实证明我们可能需要语言律师的帮助来了解发生了什么。 在 C++ 中的思考 - 实用编程第 2 卷中,可以找到以下示例(我的意图,在线此处): 他们继续解释(强调我的): 这个和前面的例子有一个重要的区别: ...
我想从可以包含许多不同类型数据的文件类型加载图像:像素可以编码为float s、 double s、 unsigned char s、 char s(类似于 TIF 文件)。 加载后我将对图像数据进行的所有处理取决于加载的数据类型。 我已经有了一个函数,它可以从处理我的文件类型的 C 中的外部库中加 ...
这是 C++ primer 第 5 版中的一个练习: “练习 16.26:假设NoDefault是一个没有默认构造函数的 class,我们可以显式实例化vector<NoDefault>吗?如果不能,为什么不呢?” 这是我的猜测: 是的,我们可以实例化它: 代码工作正常,但如果我取消 ...
在 Memory.h 我有: 在 main.cpp 我有: 即使在我粘贴到 Memory.h 之后 Foo 才完全定义,这也可以很好地编译。 我很困惑为什么会编译。 是不是编译器粘贴到Memory.h后的等价代码在main.cpp中是这样的: ??? 因为这不能编译,所以我收到错误: ...
此代码在 G++ 上运行,但不在 Visual C++ 上运行。 这是来自 Visual C++ 的错误:- error C2206: 'foo': typedef 不能用于 function 定义激励:我不想重复 function 签名进行显式实例化。 我修改了https://stackove ...
假设我正在为单链表编写迭代器和 const_iterator。 假设我有以下课程: 我的问题是是否有可能以某种方式替换这些行 具有单个定义(可能使用模板参数 isConst)并由编译器推导出 const 说明符? 当 isConst = true 时,我希望 * 成为 const T& o ...
(这个问题已经过大量编辑,抱歉。) 假设我有几个非常量的 function 模板,默认被删除: 并且有一些明确的特化作为一般情况删除的例外。 我想编写代码(例如特征 class?),给定这些函数之一的标识符和类型 T,在编译时检测指定的 function 是否明确专门用于类型 T。代码需要通用的 ...