template-specialization 相关问题

模板特化是指程序员为特定类型生成的模板显式特化。

删除了模板类构造函数,但有一个专门化与 clang 和 gcc 的行为不同

我正在尝试理解这种行为。 我创建了一个模板类,其中删除了构造函数,然后将其专门用于 int 类型。我的目标是仅为 int 创建实例(

回答 1 投票 0

Clang 无法匹配可变参数模板模板专业化

我有以下代码: #包括 #包括 模板 结构匹配:std::false_type {}; 模板 C 类,

回答 1 投票 0

如何从旨在作为专业化的 Derived 访问基本模板参数?

因为模板化成员函数的部分特化在 C++ 中是不可能的,所以我现在尝试通过类模板继承来规避这个问题。 在这种方法中,我从基类派生,

回答 1 投票 0

如何知道类型是否是 std::vector 的特化?

我整个早上都在解决这个问题,但没有任何结果。 基本上,我需要一个简单的元编程,如果传递的参数是...,它允许我分支到不同的专业化。

回答 5 投票 0

具有可变参数专业化的模板函数

是否可以以某种方式进行模板函数专门化,如下所示: 模板 void Func(size_t id, Args...args) { std::cout << "1\n" } temp...

回答 1 投票 0

如何在 Swift 中专门化泛型协议?

我有这样的代码: 公共类金属{} 公共协议车辆 { 相关M型 var 材质:[M] { 获取设置 } } 公共协议 Tracktor:车辆,其中 M...

回答 1 投票 0

为什么我不能在其专业化中使用模板成员?

这是我的代码: #包括 模板 结构体Foo { 民众: T 数据成员; }; 模板<> 结构 Foo { 民众: 空栏() { 标准::...

回答 1 投票 0

为什么我不能在其专业化中使用模板成员或者我做错了什么?

这是我的代码: #包括 模板 结构体Foo { 民众: T 数据成员; }; 模板<> 结构 Foo { 民众: 空栏() { 标准::...

回答 1 投票 0

C++ 为所有模板专用类定义成员函数

我有一个模板类 foo,它以多种不同的方式进行专门化。 其中一些有很多依赖于专门函数的通用代码。 例如,请考虑以下情况: #

回答 1 投票 0

显式专门化零参数的模板化构造函数

假设有以下课程: JsonDocument 类 { 民众: 使用 RootType = size_t; constexpr 静态 RootType ObjectRoot = 1; constexpr 静态 RootType ArrayRoot = 2; 模板< ...

回答 1 投票 0

发出带有类型和值的专用模板

我写了以下课程 #包括 抽象事件类 { 民众: 使用 ID = int; 民众: 虚拟 ~AbstractEvent() = 默认; ID id() const { 返回 id_; }

回答 1 投票 0

我可以从类型列表声明模板实例化吗?

很确定我已经知道答案了,但值得一试。 所以,假设我有一个类型列表: 模板 结构类型列表{}; 其中包含一些对象: 结构体foo{}; 斯特...

回答 6 投票 0

专门针对树算法的 C++ 递归模板

我正在使用递归 C++ 模板开发一种树状算法。我设法用下面的简化算法重现我的问题。该算法采用单个整数作为输入。它计算...

回答 1 投票 0

通过类型特征封装函数参数

考虑以下类型特征: template struct tag { using type = T; }; template 使用 tag_t = typename tag::type; 模板 st...

回答 1 投票 0

为什么我的模板特化无法编译?

代码: #包括 模板 类 MyRNG{ 民众: T 兰德(){返回T();}; }; 模板 结构GetDataTypeOf; 模板 代码: #include <iostream> template<typename T> class MyRNG{ public: T Rand(){return T();}; }; template<typename RNG, typename = void> struct GetDataTypeOf; template<typename RNG> struct GetDataTypeOf<RNG, decltype(std::declval<RNG>().Rand())> { typedef decltype(std::declval<RNG>().Rand()) type; }; template<typename RNG> using DataTypeOf = typename GetDataTypeOf<RNG>::type; int main(){ std::cout << typeid(DataTypeOf<MyRNG<int>>).name() << std::endl; } 错误: incomplete type is not allowed using DataTypeOf = typename GetDataTypeOf<RNG>::type; ^ detected during instantiation of type "DataTypeOf<MyRNG<int>>" at line 22 似乎 GetDataTypeOf<MyRNG<int>> 与任何专门的类定义都不匹配。为什么会这样? 编译器:gcc 9.4.0 问题是decltype(std::declval<RNG>().Rand())不是void。这意味着您提供的专业化不是针对 void,而是针对返回类型 T。 有2种方法可以解决这个问题,如下图: 方法1 添加 void 进行显式转换,使特化成为 void 的特化,如下所示: template<typename RNG> //---------------------------------vvvv-------------------------->added void here struct GetDataTypeOf<RNG, decltype(void(std::declval<RNG>().Rand()))> { typedef decltype(std::declval<RNG>().Rand()) type; }; 演示 方法2 指定第二个模板参数,如下所示: template<typename RNG> //---------------------------------------------vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv--->pass the second argument using DataTypeOf = typename GetDataTypeOf<RNG, decltype(std::declval<RNG().Rand())>::type; 演示

回答 1 投票 0

行为可能发生变化,UDT 返回调用约定发生变化

在下面的程序中,函数 foo 返回一个结构模板特化 A: 模板结构A {}; A foo(); int main() { foo(); //MSVC 警告她...

回答 1 投票 0

在模板专业化中重写基类方法

我有基模板类,我正在从中创建派生类,这是基类的模板专业化。基类有一个虚拟方法,我试图在派生类中重载该方法,并且我...

回答 1 投票 0

在模板专业化中重写基类方法

我有基模板类,我正在从中创建派生类,这是基类的模板专业化。基类有一个虚拟方法,我试图在派生类中重载该方法,并且我...

回答 1 投票 0

如何编写适用于类模板的类型特征的模板特化?

让我们考虑以下 CRTP 代码,稍作修改,派生类必须是模板类: 模板 派生类,类型名称 T> 结构 crtp_...

回答 1 投票 0

声明一个解析为另一个模板的模板

我正在处理大量模板化的代码,其中有很多“助手”实现了 STL 中缺少的一些通用基本功能。例如: // is_instance_v 决定...

回答 1 投票 0

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