1
template <class A, class B >
A Sum(A Fnum, B Snum){
return Fnum + Snum;
}

template <class S, class W>
S Subtraction(S Fnum, W Snum){
return Fnum - Snum;
}
template <class M, class E>
M Multiplication(M Fnum, E Snum){
return Fnum * Snum;
 }
  template <class D, class C>
 D Division(D Fnum, C Snum){
return Fnum / Snum;
}

テンプレートについて学ぶためだけに電卓プログラムを実行しようとしています。私が抱えている問題は、ユーザーが入力した数字をどのタイプでプラグインするかということです。私が考えていたのは、1つの数字に対してプロンプトでケースを実行することでした。例:+/- *などを実行する操作を尋ね、それらの数字を関数に渡します...そして、2を入力しても2.567を入力しても答えを返しますまたはその逆の提案?? 私のテンプレート機能は大丈夫ですか?? 彼らは何か改善が必要ですか..

4

2 に答える 2

1

同じタイプまたはクラスの 2 つのものを追加する方が安全な場合があります。

T&  operator+( T number ); 

過負荷になっています。次のような事前定義されたタイプを扱っている場合

float, int 

心配する必要はありません。コードはうまく機能します。特に乗算と除算で得たいものに対して算術が意味をなすようにしてください。

于 2012-07-22T05:30:10.263 に答える
0

次のようなものが必要な場合があります。

#include<iostream>

using namespace std;

struct Add {
template < typename A, typename B > A operator() (const A & lhs, const B & rhs) { //note return type is A , what if A, B are diff? , you need promote one of them using specialization
return lhs + rhs;
}
};

//some other ops like above 

template < typename op, class A, class B > A operate(A Fnum, B Snum)
{
op oper;
return oper(Fnum, Snum);
}

int main()
{
int a = 20, b = 30;
std::cout << operate < Add > (a, b) << std::endl;
}

デモ : http://ideone.com/KReEQ

于 2012-07-22T08:59:58.703 に答える