オフセット配列クラスを作成しているときに (idx は 100 から 1000 までなので、配列の最初の 100 スロットを無駄にすることなくそれを考慮したクラスを作成します)、問題に遭遇しました。
要素の C 配列を持つクラスを初期化する方法 (問題は、T に def コンストラクターがないことです)。基本的に、配列を完全に初期化しないようにしたいと考えています。例:
class MyClass
{
MyClass(int i)
{
}
};
template <typename T, size_t n, size_t offset>
struct offsetedIdxArray
{
T data[n];// error line : error C2512: 'MyClass' : no appropriate default constructor available
offsetedIdxArray()
{
}
T& operator [](size_t pos)
{
return data[(pos-offset)];
}
};
利用方法:
offsetedIdxArray<MyClass, 1024,offset> oia;
私が使用するクラスは実際にはライブラリクラスであるため、defコンストラクターを作成することはオプションではありません。
*編集: * ここに記載されている問題とは関係ありませんが、貴重なライブラリ クラスにはコピー ctor がなく、単に移動 ctor であることが判明したため、unique_ptr のベクトルを使用する必要がありました。