高精度の浮動小数点ライブラリ(教育目的)を作成しています。コンストラクターを以下に示します。
アイデアは、ジェネリックコンストラクター(最初のコンストラクター)と、std::stringおよびstd::bitset用の2つの特殊なコンストラクターを用意することです。
問題は、両方の特殊なコンストラクターに対して「エラーC2975:'Float':'N'の無効なテンプレート引数、予期されるコンパイル時定数式」を取得し続けることです。
誰かがこれを修正する方法を教えてもらえますか?
前もって感謝します!
template<typename T>
Float(T n) {
type_wrapper<T> data;
data.in = n;
bits = std::bitset<N>(data.out);
_overflow = false;
}
template<>
Float< const std::bitset<N> >(const std::bitset<N> bits) {
this->bits = bits;
_overflow = false;
}
template<>
Float< const std::string& >(const std::string& s) {
int n = std::min(N, s.length());
for(int i = 0; i < n; i++) {
bits[n-i-1] = (s.at(i) == '1' ? 1 : 0);
}
_overflow = false;
}
編集:私はおそらく、私が実際に次のような一定のサイズでFloatオブジェクトを構築していることを追加する必要があります:
int main(int argc, char* argv[])
{
Float<64> number("01011001100010001110010101100111"); //1502143847
std::cout << number << std::endl;
std::cin.get();
return 0;
}
また、テンプレート化された引数'N'は、次のようなクラス定義からのものです。
template<size_t N>
class Float
{
private:
...
public:
...
};