检测最终课程的特征

时间:2016-07-17 12:26:40

标签: c++ templates c++11 c++14 sfinae

是否可以确定在编译时是否将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); }; ?我一直试图修改this answer的方法:

is_final<T>::value

但它不起作用; false始终为std::is_final。似乎SFINAE不会那样工作。

如果在C ++ 11中无法实现这个特性,那么它是如何在C ++ 14(persons.put(TAG_STATE, state); if (!personList.contains(persons)) { // take this to top and then check //persons.put(TAG_STATE, state); personList.add(persons); } )中完成的?是否有一些新的语言功能可以实现这个功能?

1 个答案:

答案 0 :(得分:7)

根据此处的信息,在此答案之后,问题已根本改变。我不会追逐这个问题的演变。

只需使用std::is_final即可。