2017-09-19 18 views
0

に特化、テンプレートの特定のクラスでクラス

それは働いてます。..

private: 
template <typename U> 
int64_t parseValue(const std::string& str 
     , typename std::enable_if<std::is_signed<T>::value, U>::type* = 0 
     ) const 
{ 
    return stoll(str, 0, base_); 
} 

template <typename U> 
uint64_t parseValue(const std::string& str 
     , typename std::enable_if<std::is_unsigned<T>::value, U>::type* = 0 
     ) const 
{ 

が、以下のコードは動作しません。何故かはわからない。私は専門化の概念やその他の問題がないかどうかはわかりません。

private: 
template <typename U> 
int64_t parseValue(const std::string& str 
     , typename std::enable_if<std::is_signed<T>::value>::type* = 0 
     ) const 
{ 
    return stoll(str, 0, base_); 
} 

template <typename U> 
uint64_t parseValue(const std::string& str 
     , typename std::enable_if<std::is_unsigned<T>::value>::type* = 0 
     ) const 

動作しません。

説明できますか?理由を知りません。

+0

あなたは[mcve]を投稿できますか?私はそれがうまくいかない理由を推測できますが、完全な例がなければ、それはちょうど推測に過ぎません。 – Praetorian

答えて

0

2番目のケースでは、enable_ifステートメントでUを使用していません。 SFINAEは、表現がのテンプレートパラメータのうちの1つに依存する場合にのみ機能します。

+0

私は完全に理解していません。ありがとう。 – naig

関連する問題