在模板特化中使用typedef

时间:2017-07-07 22:53:25

标签: c++ templates template-specialization

我是c ++中的新手,我正在尝试编写一个包含char或int类型的附加模板。之后,我想在其他模板中使用此模板来选择数据类型,具体取决于输入数据填充。

template <bool isPadding>
class PaddingTemplate;

template <>
class PaddingTemplate<false>
{
public:
    typedef char Type;
};

template <>
class PaddingTemplate<true>
{
public:
   typedef int Type;
};

template <class T, bool Padding = ((sizeof(T) % sizeof(int)) == 0)>
class ObjectComparator
{
private:
    typedef     PaddingTemplate<Padding>    PaddingTrick;
    typename    PaddingTrick::Type          DataType;

    DataType Shadow[sizeof(T) / sizeof(DataType)];
};

我收到此编译错误

Compiler msg

如何解决问题并根据数据填充自动选择数据类型?

1 个答案:

答案 0 :(得分:4)

DataType实际上不是一种类型。它是PaddingTrick::Type的一个实例,这就是下一行给你一个错误的原因。你需要这样做:

typedef typename PaddingTrick::Type DataType;