gpt4 book ai didi

c++ - 创建一个可以同时在类型和变量上调用的类型特征

转载 作者:行者123 更新时间:2023-12-03 06:58:55 25 4
gpt4 key购买 nike

C++中有两个可以在类型和变量上调用的运算符:sizeoftypeid
假设我们想用类似的行为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生成的 V,如果 V是变量,则为false?如果没有,是否有办法用 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>

关于c++ - 创建一个可以同时在类型和变量上调用的类型特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64064967/

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