用于检测最终类的特征

Traits for detecting final classes

本文关键字:特征 检测 用于      更新时间:2023-10-16

是否可以确定类T是否在编译时标记为final?我一直在尝试修改这个答案的方法:

template<typename T>
struct sub {
    using type = struct : T {};
};
template<typename T>
struct is_final {
    using yes = char;
    using no = struct { char arr[2]; };
    template<typename U> static yes test(...);
    template<typename U> static no  test(typename sub<U>::type*);
public:
    static constexpr bool value = sizeof (test<T>(nullptr)) == sizeof (yes);
};

但它不起作用; is_final<T>::value总是false.似乎SFINAE不是那样工作的。

如果无法在 C++11 中实现此特征,那么如何在 C++14 (std::is_final ) 中完成?是否有一些新的语言功能可以实现这一点?

根据

这里的信息,在这个答案之后,这个问题发生了根本性的改变。我不会追逐这个问题的演变。

只需使用std::is_final.