specialization 相关问题

C ++模板的一个强大功能是“模板专业化”。这允许基于正被实例化的参数化类型的某些特性来提供替代实现。模板特化有两个目的:允许某些形式的优化,并减少代码膨胀。

为什么具有默认模板参数的模板类的专用构造函数不能有参数?

这是一个带有默认模板参数的模板类: #包括 constexpr int d = 1; 模板 结构测试; 模板 <> 结构测试<1> { 测试(int a...

回答 1 投票 0

使用变量参数进行模板专业化

我正在尝试将 c 风格的变体包装在库中。它使用类型枚举,我的意思是使用模板来填充。 简化版本大致如下所示: 枚举类型 { 类型_Int, 类型_Doub...

回答 4 投票 0

MySQL 专业化/泛化问题

所以我发现我需要做一个专业化层次结构模型,但是我不太清楚如何编码它。我找到了一些关于如何进行泛化的信息。 我的问题是:...

回答 1 投票 0

为什么允许显式特化友元函数?

作为一般规则,命名空间范围允许显式专业化。 下面的代码: 模板 B类{ 模板无效测试{}; 模板...

回答 1 投票 0

C++-11 中模板结构函数专业化取决于模板类型

我有一个模板化的 TRational 类来处理整数类型的小数,例如有符号/无符号 char/short/int/long long int 等。这工作正常,但某些结构函数需要不同...

回答 1 投票 0

基于继承类的模板特化

我想让这个专业化而不改变主要。是否有可能根据其基类来专门化某些东西?但愿如此。 -编辑- 我将有几个继承自 SomeTag 的类。我不...

回答 5 投票 0

C# 泛型专业化

我为下面的通用代码创建了一个专门化: 公共类 BaseGeneric { 公共静态 T DoStuff() => 默认; } 公共类 SpecializedFromBaseGeneric :BaseG...

回答 3 投票 0

如何从 std:::tuple 获取可变参数来解压另一个 std::tuple?

我正在尝试将模板参数列表(枚举类,而不是类型名)转换为 std::tuple 模板参数的相应类型名。我猜我是否能以某种方式给va命名......

回答 1 投票 0

C++ 部分模板特化与 std::is_base_of 和 std::enable_if 相结合

假设我有两个类:可序列化和可打印。 因此,一个接受 Printable 的所有派生类的简单模板函数可能如下所示: 模板 假设我有两个班级:Serializable和Printable。 因此,接受 Printable 的所有派生类的简单模板函数可能如下所示: template <class T, class B = Printable, class = typename std::enable_if<std::is_base_of<B, T>::value>::type> void print(T value) { cout << value << endl; } 但是,如果我希望它也接受 Serializable 的所有派生类,同时我仍然可以控制函数体,这显然是行不通的: template <class T, class B = Printable, class = typename std::enable_if<std::is_base_of<B, T>::value>::type> void print(T value) { cout << value << endl; } template <class T, class B = Serializable, class = typename std::enable_if<std::is_base_of<B, T>::value>::type> void print(T value) { cout << value << endl; } // Error: Redefinition of ... 所以我认为这个问题的其余解决方案是模板专业化。 但我就是不知道如何结合 std::is_base_of 和 std::enable_if 来专门化模板。 希望有人愿意帮助我! 尝试逻辑运算符: std::enable_if<std::is_base_of<Serializable, T>::value || std::is_base_of<Printable, T>::value>::type 您可以轻松编写可变参数模板,例如: is_base_of_any<T, Printable, Serialiable, Googlable, Foobarable>::value 例如: template <typename T, typename ...> struct is_base_of_any : std::true_type {}; template <typename T, typename Head, typename ...Rest> struct is_base_of_any<T, Head, Rest...> : std::integral_constant<bool, std::is_base_of<T, Head>::value || is_base_of_any<T, Rest...>::value> { }; 如果您想要不同的实现: template <bool...> struct tag_type {}; template <typename T> void foo(T, tag_type<true, false>) { } // for Printable template <typename T> void foo(T, tag_type<false, true>) { } // for Serializable template <typename T> void foo(T x) { foo(x, tag_type<std::is_base_of<Printable, T>::value, std::is_base_of<Serializable, T>::value>()); } 最后一个重载(“面向用户”的重载)可能应该具有上述enable_if,以免创建过多的重载候选者。 您或许还可以使用如下标签制作一个可变参数 template <typename ...Bases>: tag_type<std::is_base_of<Bases, T>::value...> 比 Kerrek 的答案稍微少一点机械性,但恐怕没有更多的可读性: template <class T, typename std::enable_if<std::is_base_of<Printable, T>::value>::type* = nullptr> void print(const T& value) { std::cout << "printable(" << &value << ")\n"; } template <class T, typename std::enable_if<std::is_base_of<Serializable, T>::value>::type* = nullptr> void print(const T& value) { std::cout << "serializable(" << &value << ")\n"; } 观看它现场 ideone。 考虑一下: void print(const Printable& value) { cout << value << endl; } void print(const Serializable& value) { cout << value << endl; } 自然地,您将有适当的operator<<在右侧操作数中调用虚拟函数,这将执行实际的打印。

回答 3 投票 0

具体类型的泛型函数特化

在这个示例中,我试图制作一些颜色转换实用程序:我想保证实现 ColorSpace 特征的每种类型都可以轻松转换为任何其他此类类型。为了实现...

回答 1 投票 0

基于传递的 lambda 的返回类型的模板专业化 - C++

我正在尝试根据它作为参数获取的 lambda 函数的返回类型进行模板专业化。 目标是有一个函数,我可以将 lambda 传递给它(或者另一个函数,如果

回答 0 投票 0

C++ 模板函数特化错误当特化在不同的头文件中

在 cnvt.h 头文件中有: 模板 std::optional cnvt(t_from); 在 header int.h 中,我们有: #include "cnvt.h" 模板<> 标准::

回答 0 投票 0

C++模板参数中的未声明标识符。

我有一个C++类,它的模板化是这样的:template Class MyClass 其中Operator也可以将自己模板化为:template ...

回答 1 投票 0

你可以实例化一个模板的非特殊化版本,并在特殊化里面继承它吗?

我试图将一个Vector定义为一个行列矩阵。Vector需要一些Matrix没有的方法,所以我把Matrix专门化了:template 结构矩阵 { ...

回答 1 投票 2

仅在不是别名的情况下如何编写std :: chrono :: high_resolution时钟类模板专业化

我想为std :: chrono :: system_clock,std :: chrono :: steady_clock和std :: chrono :: high_resolution_clock编写类模板专业化。我编写了一个简单的代码,如下所示:#include&...

回答 1 投票 2


在头文件中带有enable_if的模板的专业化

所以我想做2个功能:一个用于数字(带有模板),另一个用于字符串。这是我的最佳尝试:标头:class myIO {public:template

回答 2 投票 0

类中一种方法的部分专业化

我有一个模板矩阵类。我尝试将大小(始终为正方形)实现为模板参数。 template /数据类型typename type_t,//矩阵的尺寸4-> 4x4 ...

回答 1 投票 0

[该类中一种方法的C ++模板局部特化

我有一个模板矩阵类。我尝试将大小(始终为正方形)实现为模板参数。 template /数据类型typename type_t,//矩阵的尺寸4-> 4x4 ...

回答 1 投票 0

我如何在源文件中对模板功能进行专业化?

std :: pair get_resource(){return {nullptr,0ull}; }和...

回答 1 投票 0

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