用于检测最终 类 的特征
Traits for detecting final classes
是否可以在编译时判断一个class T
是否标记为final
?我一直在尝试修改 this answer 的方法:
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
。
是否可以在编译时判断一个class T
是否标记为final
?我一直在尝试修改 this answer 的方法:
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
。