将类型解析到类::typedef的更短方式
Shorter way of resolving type to the class::typedef
我有几个类。现在它们被一个符号隔开。它们中很少含有type
(a typedef
),也很少不含。
struct A { ... public: typedef someclass type; }
struct B { ... };
我想以这样的方式实现一个SFINAE类,
Resolve<A>::type o1; // should resolve to 'A::type'
Resolve<B>::type o2; // should resolve to 'B'
一种方法是使用基本的SFINAE,如前面的链接所示,检查T
是否包含type
,然后使用bool
检查器。例如,
template <typename T>
struct has_type {
typedef char yes[3];
template <typename C> static yes& test(typename C::type*);
template <typename> static char& test(...);
static const bool value = sizeof(test<T>(0)) == sizeof(yes);
};
template<typename TYPE, bool = has_type<TYPE>::value>
struct Contains { typedef typename TYPE::type type; };
template<typename TYPE>
struct Contains<TYPE, false> { typedef TYPE type; };
template<class TYPE>
struct Resolve {
typedef typename Contains<TYPE>::type type;
};
演示。
Question:我的代码中有很多这样的实例,我觉得这个方法可能会大大增加编译时间。因为必须经过两次迭代:第一次查找type
,第二次解析bool
标志。
是否有更快的方法来实现减少编译时间?
[旁注:在这种情况下,我把type
作为A
和B
之间的分隔符。然而,我可以自由地把任何东西放在A
里面,这将把它与B
分开。[/p>
template<typename>
struct void_ {
typedef void type;
};
template<typename T, typename = void>
struct Resolve {
typedef T type;
};
template<typename T>
struct Resolve <T, typename void_<typename T::type>::type> {
typedef typename T::type type;
};
相关文章:
- C++:TypeDef使用元组
- 如何在c++中为模板函数实例创建快捷方式
- 在c代码之间共享数据的最佳方式
- 在C++中将函数压缩为两种方式
- 以螺旋方式打印矩阵的程序.(工作不好)
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 创建引用向量的优雅方式
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- 不同/较旧的处理器运行c++代码的方式是否不同
- 为什么在使用typedef时类推导指南会失败
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- 重载方法的方式会在使用临时调用时生成编译器错误
- 如何重新定义MPI_FLOAT,MPI_DOUBLE以 typedef 的方式
- 使用typedef作为一种方便替换类名的方式是一种误用吗
- C++ 如何通过可选的typedef,使用SFINAE或其他方式选择类
- 定义类型的正确方式(typedef与#define)
- 将类型解析到类::typedef的更短方式