如何解决创建一个可以同时在类型和变量上调用的类型特征
C ++中有两个可以在类型和变量上调用的运算符:sizeof
和typeid
。
假设我们想以类似的行为something like *来实现自己的操作:
template<bool is_type>
struct type_traits_T;
template<>
struct type_traits_T<true> {
template<typename T>
struct type_traits {
using mydecltype = T;
// and other stuff...
};
};
template<>
struct type_traits_T<false> {
template<auto VAR>
struct type_traits:
type_traits_T<true>::type_traits<decltype(VAR)> {};
};
此可以很好地工作,并带有宏:
#define type_traits(V) type_traits_T<is_type(V)>::type_traits<V>
上面缺少的部分是is_type(V)
部分。
如果is_type(V)
是类型,是否有实现true
的{{1}}的方法,而如果V
是变量,则有否方法?如果没有,有没有办法用static reflection proposal来实现?
* 使用模板捕获变量具有其自身的限制。可以通过将对decltype的调用移到宏中来重构它。但是,问题并没有集中在模板部分,在这里只是为了提供一个简单而可行的用例。
解决方法
您可以使用功能模板:
template<typename>
constexpr bool is_type() {
return true;
}
template<auto>
constexpr bool is_type() {
return false;
}
#define type_traits(V) type_traits_T<is_type<V>()>::type_traits<V>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。