gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:14:42 25 4
gpt4 key购买 nike

我想停止调用基本的“int”函数。我想称呼继承为“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调用函数?

编辑:
我想使用特殊化,并在排序或处理过程中将整数, double 和浮点数视为NUMBERS,并以不同的方式对待字符串。这就是为什么我要使用特化。由于相同的数字算法,我试图继承 double 数和浮点数,我只是想在继承后更改数据类型,并保持其他功能(如“推”)仍然可用。基本上节省了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
}
};

关于c++ - C++模板类-继承调用错误的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62353338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com