この回答に触発されて、読み取り専用メンバー変数に次のソリューションを使用しています。
template <class T, class OWNER>
class readonly
{
friend OWNER;
public:
explicit readonly(const T &t) : m_t(t)
{
}
~readonly()
{
}
operator const T&() const
{
return m_t;
}
private:
T& operator =(const T &t)
{
m_t = t;
return m_t;
}
T m_t;
};
これはうまく機能します。パフォーマンスを少し最適化するために、次のように使用します。
class A
{
public:
A()
{
}
~A()
{
}
#ifdef _DEBUG // DON'T USE THIS SWITCH, SEE ANSWERS BELOW!
readonly<int, A> m_x, m_y;
#else
int m_x, m_y;
#endif
};
ただし、デバッグ ビルドまたはリリース ビルドを実行しているかどうかをチェックするプリコンパイラ スイッチを削除したいと考えています。
編集: ループでパフォーマンスを確認しました。VS2010 を使用すると、約 15 ~ 20% のオーバーヘッドが発生します。自動インライン展開が有効な同じコードにはなりません。
編集 #2: 単体テストを作成し、他のすべてのものを削除しました。もうパフォーマンスの低下はありません。とても素晴らしいです。結局、問題はありませんでした。助けてくれてありがとう!そして、コンストラクターを修正しました。良い呼び出しです。