私は、プリミティブ型の引数を持つテンプレートを使用して、ピクセル形式とキャンバス システムに取り組んできました。
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 {};