我一直在使用带有原始类型参数的模板来研究像素格式和画布系统,即:
enum class PIXEL_FORMAT : char {
PALETTE,
RGB,
RGBA
};
template<unsigned int bit_depth, PIXEL_FORMAT fmt> struct Pixel {};
//specializations for 8-bit, 16-bit, etc. RGB/RGBA formats
这些都工作得很好,但是当我尝试创建一个 Layer 结构时:
template< template<unsigned int depth, PIXEL_FORMAT fmt> class PixelType > struct Layer {
using pixel = PixelType<depth, fmt>;
pixel** pixels;
我得到的错误是:
F:\Personal Projects (Java or Other)\C_C++\Independent\GUI Apps\FreeArt\Canvas.h|7|error: 'depth' was not declared in this scope
F:\Personal Projects (Java or Other)\C_C++\Independent\GUI Apps\FreeArt\Canvas.h|7|error: 'fmt' was not declared in this scope
F:\Personal Projects (Java or Other)\C_C++\Independent\GUI Apps\FreeArt\Canvas.h|7|error: template argument 1 is invalid
F:\Personal Projects (Java or Other)\C_C++\Independent\GUI Apps\FreeArt\Canvas.h|7|error: template argument 2 is invalid
所以显然我不理解使用原始类型作为参数的嵌套模板的工作方式。我一直在寻找类似的问题,但似乎找不到任何关于使用原始类型而不是常规模板参数(typename T
等)的内容。
我希望这可以用于使用原始类型参数的模板的其他类型,例如可能的
template<template<unsigned int bit_depth, double samp_per_sec> class Sound> struct SoundEffect {};