模版之AnyType
# 模版之AnyType
在研究C++的编译期反射时,发现了AnyType很有意思。
首先可以看一下这个类AnyType。
struct AnyType {
template<typename T>
operator T();
};
1
2
3
4
2
3
4
初看,一个名叫AnyType的类声明了一个模版函数operator T()
。
如果进行实例化,就会可能是operator int()
。
operator int()
可能大部分人都没见过,这是C++都一个特性 —— 用户定义转换函数,即允许从类类型 (opens new window)到其他类型的隐式转换 (opens new window)或显式转换 (opens new window)。
如果是类类型之间的转换,operator T()
可能不是一个好的选择。原因如下:
- 它和用户定义**(转换)构造函数没太大区别**。
- 没办法直接返回转换失败。
- 因为返回的是对象,不适用多次转换,例如:C=A+B。
- 性能考虑,转换涉及临时对象的拷贝,当然,编译器会出手(真的会出手?手动狗头)。
世上没有万金油,找到合适的场景就可以灵活运用!
- 转换成void*/intptr_t,避免写
reinterpret_cast
。 - 转换成哈希值。
- ......
上次更新: 2023/02/19, 21:54:50