2017-04-22 2 views
0

テンプレートにTを使用し、他のクラスはintとしてテンプレートタイプTをintに置き換えたり、結果をRangeに渡したりする方法は? Tがint型の場合、empty()メソッドを返すには?テンプレートタイプTをintに置き換える方法

template<typename T> 
struct Range { 
    T lowerBound; 
    T upperBound; 
    static Range<T> createFromJson(const Json::Value & val) { 
     Range<T> result; 
     if (val.isMember("lowerBound") && val.isMember("upperBound")) { 
      result.lowerBound = val["lowerBound"];//.asInt();//should use T 
      result.upperBound = val["upperBound"];//.asInt();//should use T 
     } else { 
      throw ML::Exception("error parsing lower/upper %s in %s", "There was given: %s", 
         val.asCString()); 
     } 
     return result; 
    } 

    bool empty() const { return lowerBound.empty() && upperBound.empty(); }//shouldn't be empty for int 
}; 

答えて

1

テンプレートの特殊化を使用できます。あなたが今持っているコードをそのまま残して、下に追加してください:

template<> 
struct Range<int> { 
    int lowerBound = 0; 
    int upperBound = 0; 
    static Range<int> createFromJson(const Json::Value & val) { 
     Range<int> result; 
     if (val.isMember("lowerBound") && val.isMember("upperBound")) { 
      result.lowerBound = val["lowerBound"].asInt(); 
      result.upperBound = val["upperBound"].asInt(); 
     } else { 
      throw ML::Exception("error parsing lower/upper %s in %s", "There was given: %s", 
         val.asCString()); 
     } 
     return result; 
    } 

    bool empty() const { return lowerBound == upperBound; } 
}; 
関連する問題