我正在创建一个高精度浮点库(用于教育目的),构造函数如下所示。
这个想法是有一个通用构造函数(第一个),然后是 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:
...
};