[英]C++ template class - inheritance calling wrong function
我想停止调用 base "int" function。 我想用“double”调用继承
#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 调用 function?
编辑:我想在排序或处理过程中使用专业化并将整数、双精度和浮点数视为 NUMBERS,并以不同方式处理字符串。 这就是为什么我想使用专业化。 我正在尝试继承双精度和浮点数,因为数字算法相同,我只是想在继承后更改数据类型并保持其他功能(如“推送”)仍然可用。 基本上节省了 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
}
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.