私は、ユーザーが任意の構造を定義してライブラリに渡すことができるライブラリを作成しています。ライブラリは、そのような構造が慣例として持つ必要のある静的メンバーから構造のメモリレイアウトを取得します。
例えば:
struct CubeVertex {
// This is, per convention, required in each structure to describe itself
static const VertexElement Elements[];
float x, y, z;
float u, v;
};
const VertexElement CubeVertex::Elements[] = {
VertexElement("Position", VertexElementType::Float3),
VertexElement("TextureCoordinates", VertexElementType::Float2),
};
C ++のベストプラクティスでは、静的変数とその初期化をソース(.cpp)ファイルに移動することをお勧めします。ただし、構造が変更されるたびに変数も更新する必要があるため、変数の初期化を構造にできるだけ近づけたいと思います。
リンカからあいまいなシンボル/再定義エラーを発生させることなく、ヘッダーファイル内でそのような変数を宣言するための移植可能な(少なくともMSVC + GCC )方法はありますか?