48469


//部でコメントにある通り引数で同じ型ではなく違う型を引数に取りたいのですが。  
どうすればいいのでしょうか？そもそもテンプレート関数の部分で変更を入れないといけないのかそもそもそれはできないのか混乱しています教えてください。

[code]

                template<typename type> type f(type a,type b) {
    
                cout << "テンプレート関数\n";
    
                return a + b;
    
            }
    
            //二つの異なる型を引数にとりたいテンプレート関数の明示的特殊化で
            template<> const char* f<const char*,double>(double a, const char* y) {
    
                //cout << "明示的特殊化\n";
    
    
                return  "abc";
    
            }
    
            int main() {
    
    
                cout << f<const char*>("abc","abcc");
    
    
    
    
    
                _getch();
                return 0;
            }
    
[/code]


CC BY-SA 4.0
2018-09-16T17:35:50.703
48468
2018-09-17T08:53:55.583
question
c++
c++,テンプレート関数の明示的特殊化の際に異なる二つの型を引数に取りたい。


> `template<typename type> type f(type a,type b)`

と書いた以上は `T1 f(T1 a, T1 b)` であるとか `T2 f(T2 a, T2 b)`
のような、引数両者および返却値の型がすべて同一であるような関数のテンプレートを作るという意味になります。そのままでは別の型にすることはできません。ではどうすればよいかというと、例えば

[code]

    template<typename T1, typename T2, typename T3> T1 f(T2 a, T3 b) { ... }
    
[/code]

とでもすれば引数・返却値の型を別にすることができます。ただしこれは最初の `template`
とは全く別物です。型が全部違うということはなんだか無意味に抽象化しすぎていて `template`
を使う意味がほぼ全く感じられません。特殊化でなく普通の関数を書いてしまったほうがよほど理解しやすくなるとオイラ個人は思います。

# `template` の特殊化はもはや `template` ではなくて普通の関数なわけですけど


CC BY-SA 4.0
2018-09-16T21:13:43.163
48469
2018-09-17T08:53:55.583
2018-09-17T08:53:55.583
8589
8589
48468
answer