template-specialization 相关问题

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

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

这是我的代码: #包括 模板 结构体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

当<>使用时,为什么不调用特化?

第一段代码一切正常。 2 个模板函数构成一个重载集,第二个获胜并通过专门化进行实例化。 模板 void foo(T) {std::cout << "1"...

回答 0 投票 0

专门针对某些类型的模板类

如何使用 is_trivial 对平凡类型进行模板专门化?同时,指针也是微不足道的,但应该为它们保留单独的专业化。 我正在使用c++11。 #包括...

回答 1 投票 0

如何为基类型和其他不相关类型定义模板函数?

我想实现这样的函数系列: 模板 T GetValue(const TObject& obj, const std::string& field); 模板<> int GetValue(…) {…} 温度...

回答 1 投票 0

每个模板实例化的 GCC/Clang 函数属性

我有一些手工向量化的 C++ 代码,我正在尝试通过函数多版本化制作可分发的二进制文件。由于代码使用不同指令集的 SIMD 内在函数(SSE2、AVX2、

回答 1 投票 0

如何从大括号括起来的初始化列表中推导出参数包?

这是一个方便问题。 当两个 int... 参数包长度相同时,我在命名空间 FooDom 中有 FooImp< Aux、Aux > 的有效实现。 我的...

回答 1 投票 0

C++ 递归模板专业化 - 缺少正确的参数包扩展

背景与目标 我想创建某种数据实用程序,它存储 std::stringstream 以及内容当前的格式。这将为您提供类型安全和智能...

回答 1 投票 0

如何实现异构查找,又名专门化模板类,最大限度地减少代码重复

考虑这样一个类(省略细节): 模板 类 my_flat_map { // 许多成员函数使用 const ref 作为键 自动查找(K const& key) ...

回答 1 投票 0

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