私はクラスを定式化する方法を探しています:
- 最大の「constness」を持つポインターの STL コンテナーを使用するインターフェイス
- しかし、これは指されたオブジェクトを内部的に変更します
- 非 const アナログと比較して余分なランタイム オーバーヘッドがない
理想的には、const/non-const-ness はここではプログラマーの補助にすぎないため、ソリューションは非 const バージョンと比較して余分なコードをコンパイルせずにコンパイルできます。
これが私がこれまでに試したことです:
#include <list>
#include <algorithm>
using namespace std;
typedef int T;
class C
{
public:
// Elements pointed to are mutable, list is not, 'this' is not - compiles OK
list<T *> const & get_t_list() const { return t_list_; }
// Neither elements nor list nor' this' are mutable - doesn't compile
list<T const *> const & get_t_list2() const { return t_list_; }
// Sanity check: T const * is the problem - doesn't compile
list<T const *> & get_t_list3() { return t_list_; }
// Elements pointed to are immutable, 'this' and this->t_list_ are
// also immutable - Compiles OK, but actually burns some CPU cycles
list<T const *> get_t_list4() const {
return list<T const *>( t_list_.begin() , t_list_.end() );
}
private:
list<T *> t_list_;
};
型変換の解決策がない場合は、説明されているプロパティを持つクラスを作成する方法について、代替案を提示してください。