gpt4 book ai didi

c++ - 通用类型的 is_base_of

转载 作者:行者123 更新时间:2023-11-28 02:21:00 29 4
gpt4 key购买 nike

我试图断言模板参数将派生自某个基类。但是基类是通用的,在断言的上下文中,任何特化类型之间都没有区别。我如何断言模板参数派生自任何专用类型的泛型?

我试着把它写成

base_generic:

template<typename T> struct base_generic{};

derived_generic:

template<typename T> struct derived_generic : public base_generic<T>{};

带有断言的类:

template<typename Tsource, typename Tderived_generic> 
struct encoder {
static_assert(std::is_base_of<base_generic<typename>, Tderived_generic>::value);
};

此代码编译通过,但断言失败

最佳答案

您可以为此创建一个特征,例如:

namespace detail
{
template <template <typename > class C>
struct is_base_of_any_helper
{
template <typename T>
std::true_type operator ()(const C<T>*) const;

std::false_type operator() (...) const;

};

}

template <template <typename > class C , typename T>
using is_base_of_any =
decltype(detail::is_base_of_any_helper<C>{}(std::declval<const T*>()));

Demo

请注意,它会在某些极端情况下失败,例如:

  • 多个碱基C<Tx>
  • 私有(private)继承 C<T> .

关于c++ - 通用类型的 is_base_of,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32477691/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com