前提・実現したいこと
いわゆるCRTPを使って静的ポリモフィッククラスを実装しようと思っています。しかし,承継したクラスの型を基本クラスから参照ができません。Webの記事でもそこまで踏み込んだ解説がありませんでした。おわかりになる方がおられれば,対処の仕方をご教示願えますでしょうか。
発生している問題・エラーメッセージ
//No type named 'type' in 'Foo<int>'
該当のソースコード
C++
1template <typename Derived> 2struct base 3{ 4 using type =typename Derived::type;//No type named 'type' in 'Foo<int>' 5 void f(type v) { 6 static_cast<Derived*>(this)->impl(v); 7 } 8}; 9 10 11template<typename T> 12struct Foo: public base<Foo<T>>{ 13 using type = T; 14 void impl(T v){cout << "Foo: " << v <<'\n';} 15}; 16 17int main(){ 18 Foo<int> foo; 19 foo.f(10); 20} 21
参考にしたこと
スタラウストラップのC++ 4版 p771を参考にしました。
C++
1template<typename N> 2struct Node_base : N::balance_type{ 3}; 4template<typename Val,typename Balance> 5struct Search_node 6 :public Node_base<Search_node<Val,Balance>> 7{ 8 using balance_type = Balance; 9};
補足情報(FW/ツールのバージョンなど)
clang
c++17
回答2件
あなたの回答
tips
プレビュー