C++の高速Getter?を継承関係のあるクラスでも使いたい
Posted: 2016年7月12日(火) 21:37
このサイトを初めて使わせていただきます。
至らない点がありましたら、言ってください。
早速ですが、既存のテンプレートクラスの機能拡張について質問です。
自分は、C++11の入門書に書いてある程度のことしか知らない事もあり
解決できませんでした。
[環境]
コンパイラ名: Visual Studio 2013 C++
以下、質問に関する本文です。
#############################################################################################
[前提]
値を取得する手法の最適化に関する問題です。
以下のテンプレートクラスは、
・単に読み取り専用の値を取得することが目的
・継承関係がないクラス(継承先では値が変更できない為)
の条件下でGetterメソッドを作成するより高速に目的の値にアクセスできる(クラスを簡略化した)ものです。
[質問内容]
上記のReadOnlyTestが継承された場合、継承先で変数(data)を書き換えできません。
継承先でも値の書き換えが行えるようにする方法や実装があるか知りたいです。
[その他]
可能であれば以下の条件を満たしたいです。
不可能な場合は無視していただいて問題ないです。
・ReadOnlyTestに操作メソッドを追加してはいけない
:(ただし、data.value;へのアクセス速度が等価であれば許可)
・read_onlyに指定した型のサイズをインスタンスが超えてはいけない
・使用者クラス(ReadOnlyTest)のサイズが肥大してはいけない
:protectedな参照型を用意する等の方法ではReadOnlyTestのサイズが変更されてしまう
#############################################################################################
以上が質問本文です。
長文で分かりにくい点があるかもしれませんが
よろしくお願いします。
至らない点がありましたら、言ってください。
早速ですが、既存のテンプレートクラスの機能拡張について質問です。
自分は、C++11の入門書に書いてある程度のことしか知らない事もあり
解決できませんでした。
[環境]
コンパイラ名: Visual Studio 2013 C++
以下、質問に関する本文です。
#############################################################################################
[前提]
値を取得する手法の最適化に関する問題です。
以下のテンプレートクラスは、
・単に読み取り専用の値を取得することが目的
・継承関係がないクラス(継承先では値が変更できない為)
の条件下でGetterメソッドを作成するより高速に目的の値にアクセスできる(クラスを簡略化した)ものです。
// 高速Getter?テンプレートクラス
template <typename t_Type, class t_User>
union read_only
{
friend t_User;
public:
read_only():read(){}
public:
const t_Type read;
private:
t_Type value;
};
// 使用時
class ReadOnlyTest // final
{
public:
read_only<int, ReadOnlyTest> data;
public:
void Method()
{
// friendなので書き換えができる
data.value = 100;
}
};
auto main() -> int
{
using namespace std;
ReadOnlyTest inst;
inst.data.read; // 読み取りは可能
// inst.data.value = 0; // 書き換えはできない
return 0;
}
上記のReadOnlyTestが継承された場合、継承先で変数(data)を書き換えできません。
継承先でも値の書き換えが行えるようにする方法や実装があるか知りたいです。
[その他]
可能であれば以下の条件を満たしたいです。
不可能な場合は無視していただいて問題ないです。
・ReadOnlyTestに操作メソッドを追加してはいけない
:(ただし、data.value;へのアクセス速度が等価であれば許可)
・read_onlyに指定した型のサイズをインスタンスが超えてはいけない
・使用者クラス(ReadOnlyTest)のサイズが肥大してはいけない
:protectedな参照型を用意する等の方法ではReadOnlyTestのサイズが変更されてしまう
#############################################################################################
以上が質問本文です。
長文で分かりにくい点があるかもしれませんが
よろしくお願いします。