2012-03-19 9 views
0

私は数字を出力するC++テンプレート関数を持っています。テンプレート内に文字をキャストする関数

タイプcharのデータを使用している場合を除いて、すべての処理が正常に動作します。

私はintとして印刷しますが、これをテンプレート関数で明示的にキャストした場合、floatタイプの精度が失われます。

私が言っできるようにしたいと思います:

template<class T> bob(T a){ 
    cout<<if_char_make_int(a)<<endl; 
} 

しかし、それは可能であるならば、私はこれを行う方法がわからないんだけど、か。

どのような考えですか?より多くの場合

答えて

2
template<class T> void bob(T a){ 
    std::cout 
     << typename boost::mpl::if_<boost::is_same<char, T>, int, T>::type(a) 
     << std::endl; 
} 
4
template<class T> void bob(T a){ 
    cout<< a <<endl; 
} 

template<> void bob(char a){ 
    cout<< static_cast<int>(a) <<endl; 
} 

ここで(テンプレートの特殊化を)http://www.cplusplus.com/doc/tutorial/templates/をお読みください

が、それはテンプレートの特殊ほか

+0

をホープ、あなたはまた、オーバーロードを使用することができます。私。 'template <>'を削除するだけです。 – MSalters

+1

これは洗練されているようですが、関数が複雑であれば、特殊化は重複したコードになります。 Mankarseは、私が探していたものの精神に似ていると思われる解決策を提供しますが、それ以外の優れた答えと役に立つリンクに感謝します。 – Richard

関連する問題