template-meta-programming 相关问题

模板元编程是一种元编程技术,其中编译器使用模板生成临时源代码,该代码由编译器与其余源代码合并然后编译。

CRTP如何使派生类具有基类的容器

我想使用CRTP模仿以下行为:#include #include class GameNumber {public:〜GameNumber(){}}; class GameNumber_real:public GameNumber {...

回答 1 投票 1

C ++模板类型列表的实际使用

我已经建立了可变参数模板类型列表模板 struct type_list {};和一些修饰符功能,例如push_back模板 ...

回答 1 投票 0

子类的动态方法在lambda捕获中使用时会调用父类的虚拟方法,导致分段错误

编辑:在虚拟函数的实现中使用final关键字会导致打印正确的字符串,但是为什么这里需要使用final关键字呢?有人可以解释吗?我正在修补...

回答 1 投票 2

使用类型的模板对(std :: plus,std :: minus)之类的对称关系建模吗?

是否有可能在c ++(20)中定义(无序)类型对,从而允许通过在编译时提供其任何成员来找到这样的对?这可以通过手动操作来实现。...

回答 1 投票 2


C ++ std :: enable_if fallback?

我正在设置可变参数模板函数,以便能够在特定系列的类上调用各种函数重载。到目前为止,当一个不受支持的类时,我已经能够“破坏”编译...

回答 4 投票 1

调用未专门模板化的函数

我有一堆函数,可以检查各种形状之间的碰撞。 bool Collides(R r,Circle c); bool Collides(Rect r,Line l); bool Collides(l行,c圈);我希望我...

回答 2 投票 1

从成员地址推导的结构模板类型

我正在为游戏引擎编写静态反射库(这是一个空闲时间的个人项目)。请注意,我正在使用C ++ 17。我不是直接存储类成员偏移量,而是存储成员...

回答 1 投票 3

可以使编译器陷入无限循环的编译时计算的存在

是否存在可以使编译器陷入无限循环的这种编译时计算?无限循环可能不会消耗增加的内存吗?否则可能由于内存不足而停止。

回答 1 投票 0

卡在C ++元编程中

[我正试图通过一本名为《实用C ++元编程》的书来进入TMP,但我一直努力尝试推导第一个示例。我的目标是使用... ...进行模板化的函数调用。

回答 1 投票 0

如何将参数包转换为std :: tuple以外的其他内容?

最好通过一个示例进行解释:模板 struct OnePair {使用TupleOfArgs = std :: tuple ;使用TupleOfPairs = std :: tuple

回答 2 投票 2

在C ++中创建编译时键值映射

我试图用C ++创建一个编译时简单的键-值映射。我正在使用/ std:c ++ 11进行编译。 (使用IAR编译器嵌入代码,目前仅支持cpp ++ 11)我已经了解到...

回答 1 投票 1

是否有一种方法可以从其完整类型中获取模板类的类型?

我需要一个对于给定完整类类型返回其模板的元函数(例如f > :: type或f > :: type结果为foo)。或者它可能在f [ ] >>] >> f<foo<bar>>::type or f<foo<baz>>::type results in foo 不完全是(请参见is-an-alias-template-considered-equal-to-the-same-template,您可以执行以下操作: template <typename T> struct template_class; template <template <typename> class C, typename T> struct template_class<C<T>> { template <typename U> using type = C<U>; }; 或者它可能在f<foo<bar>, foo<baz>>::value上返回true,在f<foo<bar>, not_foo<baz>>::value上返回false [即使是有限的,也更容易将专业化为is_same: template <typename, typename> struct has_same_template_class : std::false_type{}; template <template<typename> class C, typename T1, typename T2> struct has_same_template_class<C<T1>, C<T2>> : std::true_type{}; 可能您想要这样的东西: #include <type_traits> template<class> struct foo; template<class> struct not_foo; struct bar; struct baz; template<class, class> struct trait : std::false_type {}; template<template<class> class T, class S1, class S2> struct trait<T<S1>, T<S2>> : std::true_type {}; static_assert( trait<foo<bar>, foo<baz> >::value); static_assert( trait<not_foo<bar>, not_foo<baz>>::value); static_assert(!trait<foo<bar>, not_foo<baz>>::value); static_assert(!trait<foo<bar>, not_foo<bar>>::value); Demo

回答 2 投票 2

如何具有数量可变的,未知类型的参数?

我真的不知道这个名字叫什么,请原谅。我认为最好以身作则。无效foo(std :: pair ,std :: pair ,std :: ...

回答 2 投票 0

我可以在C ++ 20的类型别名中使用条件吗?

随着C ++的扩展,融合了普通计算和类型计算,我想知道是否有办法进行类似的工作?静态常量int x = 47;使用T =(x%2)? int:双精度我知道我可以...

回答 1 投票 0

C ++使用std :: enable_if创建最多10个参数的std :: tuple专业化

我想创建一个具有最多10个args专业化的元组,类似于std :: pair是两个args的专业化方式。即元组 将具有成员first(),second(),...

回答 1 投票 0

c ++使用std :: enable_if有条件地将吸气剂添加到可变参数变体模板中

我正在尝试为变体以int,float,bool等为模板参数的情况添加特殊化。到目前为止,我的尝试是:#include #include

回答 2 投票 0

用于不同类型标识符的编译时计数器

我正在编写一些模板元编程代码。由于某些原因,我想使代码中的每个对象都具有不同的类型。原始代码如下:template ... ...>

回答 1 投票 0

检查默认删除的功能模板是否专门针对特定类型?

((这个问题已经过编辑,很抱歉。)假设我有几个非constexpr函数模板,默认情况下将其删除:template void foo()= delete; ...

回答 1 投票 1

编译时间计数器

您能告诉我我的应用程序中实际发生了什么吗?当我期望“ 0 1 2”时,我的程序的结果是“ 0 1 1”,依此类推... #include template 结构计数器{...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.