c++ - 在模板特化中使用 typedef

标签 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

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

最佳答案

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

typedef typename PaddingTrick::Type DataType;

关于c++ - 在模板特化中使用 typedef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44980752/

相关文章:

c++ - OCCI C++ 应用程序的 Visual Studio 调试运行时错误

c++ - 专用内部类模板函数的类外定义?

c++ - 模板化类中模板化成员函数的特化

c++ - 有什么方法可以从文件 C++ 中自动读取一行

c++ - 自定义错误函数 C++

Android 平板电脑应用程序模板

javascript - angular 指令导致模板的其余部分无法呈现 - 这可能发生的可能原因是什么?

c++ - 正确使用模板将函数传递给线程池

c++ - 检测模板方法和自由函数的存在

c++ - CMUSphix 不识别