使用以下代码: 我收到编译器错误(带有 -pedantic 标志),它抱怨不允许零大小数组。 在我的示例中,从未创建具有零大小数组的 object,但看起来它仍然是一个问题。 我试图通过使用std::conditional来解决它,但即便如此,我还是得到了一个额外的 function,例如: 处理 ...
使用以下代码: 我收到编译器错误(带有 -pedantic 标志),它抱怨不允许零大小数组。 在我的示例中,从未创建具有零大小数组的 object,但看起来它仍然是一个问题。 我试图通过使用std::conditional来解决它,但即便如此,我还是得到了一个额外的 function,例如: 处理 ...
我目前正面临一个与字符串文字和类型擦除有关的模板元编程问题。 问题如下。 让我们考虑以下代码: 问题:如何设计一个 class static_string ,它将作为其类型的一部分“擦除”字符类型及其长度,以便上面的static_assert不会失败? ...
我有一个 class Foo ,它可以由 C 风格的字符串、字符串视图和非临时字符串构造(实际上它包含其他成员和方法,并且它在传递给basic_string*模板的字符上进行模板化):struct Foo { explicit constexpr Foo() : text{} ...
如果对象属于某些模板/类,我如何专门化模板 function 以返回 true,而对于其他模板/类则返回 false 没有类具有虚函数。 我有一个模板: 我想做特殊处理,或从该模板派生的任何 class。 在下面的示例中,我对DynamicData<>进行了专门化: DynamicDat ...
我想定义一个派生的 class,它具有模板化基础 class 的模板模板类型。这可能吗?如果可以,语法是什么? 我尝试了很多事情都没有成功。 请考虑这段代码: 为什么:我有Derived<U>的现有/工作代码,其中U是一个包装的 class W<T> 。 使用模板模板类型在定 ...
我有一个std::tuple< std::optional<Args>... > ,需要检查每个元素是否都有值。 我已经用 std::index_sequence 实现了它。 但我不确定这是最快编译时间的最有效解决方案。 对于此类问题,是否有更有效的 O(n) 算法? 或者我 ...
我正在从事一个通过模板元编程涉及一些 static 多态性的项目。 这些类通过数学运算进行交互,这些运算应该同时识别标量和 class object arguments。多态性和对象-对象交互的一个基本示例是: 在我尝试添加模板专业化来解释与标量的乘法之前,这似乎工作得很好。 似乎这个新的模板专业化 ...
我不确定我想要实现的目标是否可行,但我需要我的模板化 function ( my_func ) 才能同时采用变量 arguments 和元组参数。 更清晰的描述在代码注释中。 ...
我有这段代码,其中static_for可以用作使用模板元编程的编译时循环,而loop_types是一个接受可变参数 arguments 的struct 。每当我尝试调用 function call时,它都会给我一个错误。 在loop_types中,这是一个模板loop ,包含打印类型名称的 func ...
我一直在想,是否有可能使用 C++20 以某种方式将方法重载的类型获取到元组: 我希望元组有效地包含: &S::f(int), &S::f(bool) 。 编辑:这个想法是能够有多个可以利用模板的各种类: ...
如果取消注释行 #1 和注释行 #2,为什么会出现编译错误? 演示: https://godbolt.org/z/KW6dhsrKd ...
我对 TMP 还是很陌生,所以如果这是一个措辞不佳的问题,请原谅我。 我试图制作一个非常通用的数学向量 class 来存储任意数量的组件,但默认为 3 并使用 float 作为它的基本表示。 因此,如果您默认构建这些向量之一,它将包含(0.0f,0.0f,0.0f) 这些值本身存储在std::ar ...
我编写了以下玩具代码,但我无法弄清楚为什么使用别名会出现编译错误,但使用 typedef 代码会成功编译? 我尝试了 gcc 和 clang,但两个编译器都给出了错误。 : 使用 nth_type_t = typename nth_type::type [with long unsigned in ...
我正在尝试添加通用类型方法和 class 一致的专业化,但我无法弄清楚如何指定模板实例化(如果可能的话)。 我最好的猜测是类似于以下内容(尽管它显然无法编译):template<typename ClassT> class Foo { public: ClassT x; te ...
我有一个关于将 lambda 模板化的 object 存储为 class 成员的问题。 Invoker class 是一个模板化的 class,存储任意 lambda function。我想将Invoker的实例存储在另一个 class, Worker中。 但是,当Invoker用作 class ...
我正在尝试使用模板来检查输入类型是否实现了operator[] 。 这是我的代码: 但它没有用。 无论我输入哪种类型,它总是 output 0。 我认为如果T = int或T = double , decltype(&T::operator[])将失败并且将根据 SFINAE 使用主要的h ...
我正在写一个模板化的 class,我想要一个包含一些数据的tuple 。 tuple的类型以这种方式与模板 arguments 相关: 例如, MyClass<int, float, std::string, double>将导致类型为MyData的变量std::tuple<i ...
考虑这段代码 在clang++ -O0中编译时,它会在几秒钟内编译,然后运行 4 秒。 但是用clang++ -O2 ,编译时间长,memory很多。 在godbolt上可以看到,把8改小一点,就充分展开了循环。 我不是让它完全没有优化,而是让它不递归,就像嵌套循环应该表现的那样。 有什么我应该做 ...
#include <concepts> #include <tuple> template<std::integral... Is> using arithmetic_tuple = std::tuple<Is...>; template<t ...
我不知道在将类似元组的对象解包到可调用处理程序中时,即在使用std::apply时,是否有一种好的和干净的方法来索引可变参数 arguments 。 这是一个不完美但相当干净的解决方案: 此解决方案比使用std::index_sequence的重载更干净,因为您不必在 lambda 的 scope ...