C++特性和专业化
C++ traits and specialisation
可能重复:
我必须将“模板”以及“typename;关键词?
我第一次尝试使用特征,使我能够在一些通用例程中简洁地关联相关类型。然而,我在语法上很吃力,谷歌搜索似乎找不到任何简单的例子来实现这种东西。以下是我目前拥有的浓缩示例:
template <typename T> struct foo_traits { };
template<> struct foo_traits<int> {
typedef unsigned char T2; // sub-type for int specialisation of foo_traits
};
template <typename T> T foo(void)
{
typedef foo_traits<T> traits_type; // OK
typedef traits_type::T2 T2; // error here: "Too few template-parameter-lists"
T i
T2 j;
// ...
}
从foo_traits
获取T2
typedef的正确方法是什么,以便我可以在通用模板函数foo
中使用它?
奇怪的错误消息,但您必须告诉编译器嵌套的T2应该是一个类型名
typedef typename traits_type::T2 T2;
相关文章:
- 如何使用默认参数等选择模板专业化
- 模板化建造师专业化
- 类模板的成员功能的定义在单独的TU中完全专业化
- 部分专业化和嵌套模板
- 模板专业化可以进入我的.cpp吗?
- 别名模板的专业化 C++11 中没有开销的最佳替代方案
- 部分专业化和对标准::void_t<>的需求
- "专业化不参与超载"
- 特定好友功能专业化
- 是否可以混合使用SFINAE和模板专业化?
- 为什么在班级专业化上会出现错误?
- enable_if如何帮助选择类模板的专业化?
- std::initializer_list可以专业化吗?
- 派生类中纯虚拟基方法的专业化
- "expected a '>'"类模板专业化?
- Clang不会编译GCC会编译的模板专业化
- 我可以用clang AST从模板专业化中获得默认的模板参数吗
- 函数模板部分专业化-有什么解决方法吗
- 类模板的编译错误,但其专业化除外
- 我应该声明我的函数模板专业化还是定义它们就足够了