小编Kje*_*idt的帖子

如何检查模板专业化是否是基本模板的子类?

使用检查类是否是模板专业化?,我可以检查一个类是否是模板的特化。

使用std::is_convertible<A*, B*>,我可以检查 A 是否是 B 的子类。

我怎样才能实现is_convertible_specialization,一些可以做的事情:

template<typename ... Args> 
class Base {};

template<typename ... Args> 
class Child : public Base<Args...> {};

template<typename ... Args>
class Unrelated{};

static_assert( is_convertible_specialization<Child<int, int>, Base>{} ); // True
static_assert( is_convertible_specialization<Unrelated<int, int>, Base>{} ); // False
Run Code Online (Sandbox Code Playgroud)

我已经尝试过一些事情,但我在 TMP 方面的技能还很缺乏,所以我认为我还没有接近。我的“最好”尝试是:

template<template<class...> class ChildTemplate, template<class...> class Template, class... Args>
struct is_convertible_specialization : std::false_type {};

template<template<class...> class ChildTemplate, template<class...> class Template, class... Args>
struct is_convertible_specialization<ChildTemplate<Args...>, Template> : std::true_type {
    is_convertible_specialization() { …
Run Code Online (Sandbox Code Playgroud)

c++ templates template-meta-programming

5
推荐指数
1
解决办法
716
查看次数

标签 统计

c++ ×1

template-meta-programming ×1

templates ×1