誰の言葉か知らないですが、名言ですな。
「昨日やらなかったことは今日もたぶんやらない」
これは私の言、アフターフォローもばっちり(笑)
新しいC++の機能を勉強しつつ自作ライブラリを更新していますが、なかなか進みません(-_-;)
スクリプト言語処理のポインタを shared_ptr に置き換える改造をしていて
メモリを開放しないデリーターを使えば外部変数(アプリのデータ)を扱うのに
特に意識しないで内部データと同じに扱える事を発見。思わぬ収穫です(^▽^)/
#include <iostream>
template <typename T>
class ivalue
{
std::shared_ptr<T> ptr; // データのポインタ
public:
// コンストラクタ データを生成する
ivalue() : ptr(std::shared_ptr<T>(new T)) {}
ivalue(T v) : ptr(std::shared_ptr<T>(new T(v))) {}
// 外部変数のポインタが指定された場合はデリーターに何もしない関数を渡す
ivalue(T* p) : ptr(std::shared_ptr<T>(p, [](T*) {})) {}
// 代入演算子はポインタではなくデータを更新する
ivalue<T>& operator=(const ivalue<T>& r) { *ptr = *r.ptr; return *this; }
// データ参照の為のキャスト演算子
operator T() const { return *ptr; }
};
int main()
{
int ext;
{
ivalue<int> a(7), b(8), x(&ext); // x は外部変数の ext を参照する
x = a + b;
}
std::cout << ext << std::endl;
}