C++模板类 - 继承调用错误的函数



我想停止调用基本"int"函数。我想用"双倍"称继承

#include <iostream>
using namespace std;
template<typename T, size_t N>
class A {
public:
};
template<size_t N>
class A<int, N> {
public:
void push(const int& val)             
{
cout << val << endl;
}
};
template<size_t N>
class A<double, N>
: public A<int, N>
{
public:
};

int main() {
A<double, 8> r;
r.push(5.7);
return 0;
}

警告给了我从 double 到 int 的隐式转换。如何防止使用 int 调用函数?

编辑: 我想使用专用化,并在排序或处理过程中将整数、双精度和浮点数视为 NUMBERS,并以不同的方式处理字符串。这就是为什么我想使用专业化。由于数字算法相同,我正在尝试继承双精度和浮点数,我只是尝试在继承后更改数据类型,并保持"push"等其他功能仍然可用。基本上节省了5k行的总和。

从你的问题中,我知道你需要不同版本的push,具体取决于T

你可以为此使用元编程。

#include <type_traits>
template<typename T, size_t N, typename = void>
class A {
public:
void push(const T& value) {
// General version
}
};
template<typename T, size_t N>
class A<T, N, std::enable_if_t<
std::is_intergral<T>::value ||
std::is_floating_point<T>::value>>> {
public:
void push(const T& value) {
// Integral & floating point version
}
};

最新更新