template-specialization 相关问题

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

通过 using 别名对类模板进行显式专业化应该有效吗?

首先,我正在做的事情似乎适用于所有 GCC/Clang/MSVC/icc/etc,所以我的问题是;这是偶然的还是标准要求允许的? 从某种意义上说,这似乎是合乎逻辑的

回答 1 投票 0

通过 using 别名显式专门化 C++ 模板类应该有效吗?

首先,我正在做的事情似乎适用于所有 GCC/Clang/MSVC,所以我的问题是;这是偶然的还是标准要求允许的? 从某种意义上说,这似乎是一种合乎逻辑的延伸……

回答 1 投票 0

枚举的模板专业化

我有一个通用模板类,我不想(无法)更改它 模板 类打印机{ 民众: bool Write(std::ostream& ostr, const TData& data) const {...

回答 1 投票 0

公共类型模板的特化,而不需要特化类模板

#include“向量” 模板 结构返回类型; 模板<> 结构体返回类型<0> { 使用类型=双精度; // 值的返回类型 }; 模板 &l...

回答 1 投票 0

当所有模板参数均为同一类型时的部分模板特化

在 C++14 中是否可能(因此没有约束、require 或折叠表达式,但有 SFINAE)对类模板进行部分模板特化 模板 基因类...

回答 1 投票 0

如何确定模板专业化是否存在

我想检查是否存在某种模板专门化,其中未定义一般情况。 鉴于: 模板 结构 A; // 通用定义未定义 圣殿...

回答 2 投票 0

使用enable_if在C++中进行模板专业化

在这种情况下,模板特化在 C++20 中是如何工作的: #包括 模板 void AFuncToTest() { std::cout << "it fails!" <&l...

回答 1 投票 0

无法通过通用引用访问模板类专业化

当我遇到一些我不明白的东西时,我在代码中使用转发引用。 示例代码 为了说明这一现象,我写了这个场景的简化版本: #包括...

回答 1 投票 0

无法实例化从约束分派的专用模板类

作为上一个问题的后续:给定一个任意容器,推导出相关类型的容器类型,其中@marek-r建议创建模板专业化,例如: 模板 作为上一个问题的后续:给出任意容器,推导相关类型的容器类型,其中@marek-r建议创建模板专业化,例如: template<template<typename> typename Wrapper, typename Container> struct repack; template<template<typename> typename Wrapper, typename ValueT, std::size_t N> struct repack<Wrapper, std::array<ValueT, N>> { using type = std::array<Wrapper<ValueT>, N>; }; template<template<typename> typename Wrapper, typename ValueT> struct repack<Wrapper, std::vector<ValueT>> { using type = std::vector<Wrapper<ValueT>>; }; template<template<typename> typename Wrapper, typename Key, typename Value> struct repack<Wrapper, std::map<Key, Value>> { using type = std::map<Wrapper<Key>, Wrapper<Value>>; }; 或链接:https://godbolt.org/z/naz9v48vb 通过尝试使其更通用,我用模板化模板参数交换了 vector 和 map,并通过检查 value_type 是否与 pair<const key_type, mapped_type> 相同: 使用 c++20 约束分派每个解决方案 template<template<typename> typename Wrapper, template<typename, typename> typename Mapped_Container, typename Key, typename Value> requires std::is_same_v< typename Mapped_Container<Key, Value>::value_type, std::pair<const typename Mapped_Container<Key, Value>::key_type, typename Mapped_Container<Key, Value>::mapped_type>> struct repack<Wrapper, Mapped_Container<Key, Value>> { using type = Mapped_Container<Wrapper<Key>, Wrapper<Value>>; }; template<template<typename> typename Wrapper, template<typename> typename Unmapped_Container, typename Value> struct repack<Wrapper, Unmapped_Container<Value>> { using type = Unmapped_Container<Wrapper<Value>>; }; 但是这个解决方案似乎只能在 gcc 中编译,在 clang 和 msvc 中失败:https://godbolt.org/z/zzY7WvoEd clang 会报告错误:“隐式实例化未定义模板”,而 msvc 似乎无法专门化别名模板。 我在这里遗漏了什么,还是我遇到了编译器扩展? 如果类型repack也定义了C,则可以重新实现mapped_type类型特征,以便选择第二部分特化。假设类型特征仅与标准容器一起使用,这足以保证为关联容器选择专门化。 可以通过SFINAE或requires-clause添加约束。在这种情况下,首选前者与 C++11 标准兼容。 示例: namespace detail { template <template <typename> typename, typename, typename = void> struct repack {}; template <template <typename> typename Wrapper, template <typename...> typename C, typename T> struct repack<Wrapper, C<T>> { using type = C<Wrapper<T>>; }; template <template <typename> typename Wrapper, template <typename...> typename C, typename T, typename U> struct repack<Wrapper, C<T, U>, std::void_t<typename C<T, U>::mapped_type>> { using type = C<Wrapper<T>, Wrapper<U>>; }; } template <template <typename> typename Wrapper, typename C> struct repack : detail::repack<Wrapper, C> {}; template <template <typename> typename Wrapper, typename C> using repack_t = typename repack<Wrapper, C>::type;

回答 1 投票 0

为什么分离`std::formatter`专业化的接口和实现会导致约束失败?

我试图将 std::formatter 专门用于基本自定义类型 Vector3D,但收到编译器错误。这是一个最小的可重现示例: vector.h 定义了 Vector3D 类...

回答 1 投票 0

基于模板化返回类型的 C++ 函数模板专业化

在 C++20 中,而不是这样做 size_t 计数 = 42; std::vector my_vector; vec.reserve(计数); std::copy_n(std::istream_iterator(std::cin), count, std::back_inserter(vec)); 我想...

回答 1 投票 0

带有值模板参数的 C++ 类模板专业化 - 如何优先选择其中一个?

我有以下代码: 模板 结构组合; 模板 类型名称 Tpl,类型名称... Ts,类型名称... Us> 结构组合< Tpl<...

回答 2 投票 0

变量“val”声明中存在 C++ 无关的“template<>”

我正在尝试元编程,以便可以在编译时计算阶乘。这是第一个版本: 模板 结构体 Fac { 静态常量 int val; }; 模板<> 结构Fa...

回答 1 投票 0

用非类型参数特化一个带有类型参数的方法模板

我正在尝试实现一个具有可以处理不同类型的静态成员函数的类模板。我的代码如下所示(非常简单的示例): #包括 结构体 Foo { 特...

回答 2 投票 0

用非类型参数特化一个带有类型参数的模板方法

我正在尝试实现一个具有可以处理不同类型的静态成员函数的类模板。我的代码如下所示(非常简单的示例): #包括 结构体 Foo { 你...

回答 2 投票 0

删除了模板类构造函数,但有一个专门化与 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

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