c++でテンプレートを使ってstd::cout<<x:で画面に表示できない。理由


提示コードのコメント部なのですがエラーコード[エラー C2679 二項演算子 '<<': 型 'type' の右オペランドを扱う演算子が見つかりません
(または変換できません)。]  
とコンパイルエラーになるのですがなぜでしょうか？そろらくテンプレートのtypeに関係がると思われるのですが初学者のため修正方法がわかりません。教えてくれますでしょうか？

[code]

            #include <iostream>
    
                #pragma once
            #ifndef ___Header
            #define ___Header
    
    
    
            template<typename type,typename typeb>
            class base {
            private:
    
            protected:
    
            public:
                base(){ }
    
                virtual void f(int x) {
                    //type a = x;
                    std::cout << "仮想関数"<< x <<"\n";
                }
    
                virtual type f2(type x)const = 0;//純粋仮想関数
    
            };
    
            class type {
    
            };
            class typeb {
    
            };
    
            /*in main(){//int main()関数でこうする場合
            derive<int> d;
    
            _getch();
            return 0;
            }
            */
    
            template<typename typec> 
            class derive : public base<typename type, typename typeb> {
    
            public:
                derive(){ }
    
                    void f(int x) {
                    std::cout << "派生"<< x<<"\n";
                }
    
                type f2(type x)const {//この関数の中
                    //int a = x;
                    std::cout << x;
    
                    return x;
    
                }
    
            };
    
    
    
            #endif
    
[/code]




`class type { ... };` を `std::basic_ostream` に出力する手段がないからです。適切な `operator<<`
を実装してください。例

[code]

    template<typename charT, typename Traits>
    std::basic_ostream<charT, Traits>& operator<<(std::basic_ostream<charT, Traits>& os, type const& r) {
    // なんらかの出力
        return os;
    }
    
[/code]

説明のための説明に終始していて「やりたいこと」の実現には一歩も寄与していないので、このまま続けるのは無駄に１票。



[code]

            type f2(type x)const {//この関数の中
                //int a = x;
                std::cout << x;
    
                return x;
    
            }
    
[/code]

ここで、xの型は "type"とされています。  
"std::cout << x;"の部分で、class型のxをcoutに出力できるような値(String,int等)に変換しようとしますが、class
typeでは何も定義されていないので「xの値をPrintableなデータに変換する方法が判りません！」という悲鳴がコンパイラから出たという事です。

中身のないtypeクラスやtypebクラスは、どのような意図で作られ、どのような機能を持つべきなのかは
matsuzawaさんしか知りませんから、修正方針はわかりかねます。

