私は主なエンジンであるシングルトンクラスを持っています。テンプレートクラスを引数として受け取る(シングルトンクラス用の)テンプレートメソッドを作成する最良の方法
D3D11を使用しているので、同じID3D11Deviceメソッドを使用してすべてのバッファを(型に関係なく)作成します.imはバッファを作成するテンプレートメソッドを作成しようとしています。
も私はバッファのソースとして使用することはstd ::配列です
はそう何イムは、これまでにしようとすると次のとおりです。
template <size_t Size, typename T>
void CreateBuffer(BufferType bufferType, const std::array <T, Size>& source, ID3D11Buffer** out) {
(...)
bd.BindFlags = bufferType;
bd.ByteWidth = sizeof(T) * source.size();
(...)
}
、その後、私はそれが好きで使用します。
ID3D11Buffer* buffer = nullptr;
array <SimpleVertex, 10> data; //this is the source data, 10 simple vertices
D3DEngine::GetInstance().CreateBuffer <10> (D3DEngine::Vertex, data, &buffer);
これは動作しますが、とても醜いです。引数テンプレートとして "10"を指定すると、サイズが「ハードコード」になります(テンプレート引数として定数が必要なので、<data.size()>
を使用することさえできません)。
私が欲しいものを達成するには良い方法がありますか?または私は別のアプローチを使用する必要がありますか?ありがとう。
CreateBuffer(D3DEngine ::頂点データ、およびバッファ)が微細であるべきです。あなたのコンパイラは何ですか? – Shawnone
VS 2010のようにコンパイルしますが、.CreateBuffer()の呼び出しでクラッシュします。 – sap
興味深い。私はVS2010で簡単なテストプログラムを作成し、CreateBuffer(const std :: array&source)を呼び出し、sizeof(T)、Size、およびsource.size()を出力します。すべてが良いです。 –
Shawnone