我正在尋找一種方式來配製具有類:轉換STL容器<T *>集裝箱<T const *>
- 使用最大「常量性」指針
- 但其中的STL容器的接口內部變異的尖-to對象
- 相比於一個非const模擬
理想的情況下沒有額外的運行時開銷,該解決方案將彙編沒有分機ra代碼與非const版本的比較,因爲const/non-const-ness只是幫助程序員在這裏。
這裏是我試過到目前爲止:
#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_;
};
如果沒有解決類型轉換,我想就如何配製具有描述的屬性的類其他建議。
'T const'不只是簡單地轉換爲'T',你必須使用'const_cast',但這很醜陋,違反了const的要點。 – 2013-03-12 11:27:57
@Tony我想將'T'轉換爲'T const',這通常是可能的。以下編譯:'int x = 2; int const * x_ptr =&x;' – SimonD 2013-03-12 11:39:54
不同的模板專業化是不相關的,它們是有效的不同類型。 – Xeo 2013-03-12 11:42:40