C++特性和专业化

C++ traits and specialisation

本文关键字:专业化 C++      更新时间:2023-10-16

可能重复:
我必须将“模板”以及“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;