2016-04-08 12 views
1

私は例えば、誘導型を定義しようとしています。基本型C++は誘導型定義をサポートしていますか?

MyClass<0>=int 

と誘導

Myclass<k>=list<MyClass<k-1>> 

私は

class My_class<int k>= 
    if k=0 
    int 
    else 
    list<Myclass<k-1>> 

のようないくつかのコードは、C++をサポートしていていたいですこの種のコーディングは?

もしそうでなければ、達成したいことをサポートする他の言語がありますか?

+0

代数的データ型と型推論でHaskellを試してみてください。また、ボーナスとして、すべての機能がデフォルトで「テンプレート」になっています! – Sergey

+0

@ Sergeyあなたの最後の声明は必ずしも真実ではありません。関数の型は、非多相型に推論することができます。また、ハスケルでこの質問の目標を達成するのは簡単ではありません。自然数から型への関数であることに注意してください。タイプを介してナチュラルをエミュレートするか、いくつかの依存型拡張を使用する必要があります。 – lisyarus

答えて

7

少なくともC++はそうです。あなたは何が起こっているか見当がつかない場合

template <int k> 
struct Myclass_helper { using type = list<typename Myclass_helper<k-1>::type>; }; 

template < > 
struct Myclass_helper<0> { using type = int; }; 

template <int k> 
using Myclass = typename Myclass_helper<k>::type; 

は、キーワードがエイリアシングテンプレートの特殊テンプレートです。

関連する問題