繁体   English   中英

C++ 模板 class - inheritance 调用错误 ZC1C425268E68385D1AB5074C17A94F4

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM