通过类型的变量进行类型trait
Type trait through a variable of the type
我想测试一个变量类型的属性。我确实可以,但是代码太啰嗦了。
考虑一个示例,其中我定义了一个与容器中值的类型相同的变量:
#include <vector>
int main() {
std::vector<int> v, &rv=v;
// ‘rv’ is not a class, namespace, or enumeration
//rv::value_type i1;
// Ok
decltype(v)::value_type i2;
// decltype evaluates to ‘std::vector<int>&’, which is not a class or enumeration type
//decltype(rv)::value_type i3;
// Ok
std::remove_reference<decltype(rv)>::type::value_type i4;
}
我可以用decltype
,但是加std::remove_reference
太多了。有没有什么好的方法可以在不定义辅助模板的情况下缩短代码?
你可以用
std::decay_t<decltype(rv)>::value_type i4 = 42;
或
std::decay_t<decltype(*std::begin(rv))> i4 = 42;
使用一些声明:
using my_value_type = decltype(v)::value_type;
using your_value_type = std::remove_reference<decltype(rv)>::type::value_type;
你的代码将变成:
int main() {
std::vector<int> v, &rv=v;
using my_value_type = decltype(v)::value_type;
using your_value_type = std::remove_reference<decltype(rv)>::type::value_type;
my_value_type i2;
your_value_type i4;
}
相关文章:
- ArduinoJson 6.15.2:JsonObject没有命名类型
- 防止主数据类型C++的隐式转换
- 大量序列中核苷酸类型的快速计数
- 如何从C++中的依赖类型中获得它所依赖的类型
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 是否可以初始化不可复制类型的成员变量(或基类)
- 如何获取std::result_of函数的返回类型
- 从父命名空间重载类型
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 键入 trait 以获取 std::array 或 C 样式数组的元素类型
- 类型trait:检查类是否具有特定的函数(可能是inherit)
- C++类型的trait来提取模板参数的特殊化值
- trait从成员函数类型中删除常量
- 当使用自定义trait和bool类型的c++11枚举时,clang的编译错误
- 实现一个开关类型trait(使用std::conditional_t链调用)
- 通过类型的变量进行类型trait
- c++ 11类型trait来区分枚举类和普通枚举
- 部分特化模板作为trait成员类型
- 是否有一个类型trait来计算构造函数的总数