前提・実現したいこと
プリミティブなデータへのポインタを管理するvectorを含むクラス(Boo)から,ポインタへのポインタを管理するクラス(Foo)を取得する際に,const属性をつけて取得する方法がわかりません。コード例は以下のとおりです。どなたかお知恵をいただければと思います。
用途としては,Booではデータ管理だけを行い,Fooの方で,ポインタへのポインタを使って操作をすることを考えています。Fooで使う時に,T自体の変更不可を保証した動作にすることが目的です。
発生している問題・エラーメッセージ
Cannot initialize return object of type 'const int **' with an rvalue of type 'const std::__1::vector<int *, std::__1::allocator<int *> >::value_type *' (aka 'int *const *')
該当のソースコード
C++
1#include<vector> 2#include<iostream> 3template<typename T> 4struct Foo{ 5 T** a; 6 Foo( T ** p){a=p;} 7}; 8template<typename T> 9struct Boo{ 10 std::vector<T*> v; 11 const T ** data()const{return v.data();} 12 Foo<const T> get()const { 13 return{data()}; 14 } 15}; 16 17int main(){ 18 Boo<int>b; 19 int a = 10; 20 b.v.emplace_back(&a); 21 auto f = b.get(); 22 std::cout <<**f.a <<'\n'; 23}
補足情報(FW/ツールのバージョンなど)
clang
c++17
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/13 07:35
2021/03/13 09:18