modbus.hpp
class modbus_rtu
{
template <typename T>
T round ( T var, T scale );
};
modbus.cpp
template <typename T>
T modbus_rtu::round ( T var, T scale )
{
return std::round( var / scale ) * scale;
}
我知道我需要显式地创建一个函数模板,但是我完全忘记了它是如何实现的。请告诉我在哪里和如何添加函数模板。调用类型:double, float
。
发布于 2022-01-02 03:28:13
要在类方法中调用循环,只需像任何其他方法一样调用它,例如:
class modbus_rtu
{
template <typename T>
T round(T var, T scale);
void function_special() { round(1.0, 1.0); }
};
要使用modbus_rtu对象调用,您首先需要公开round
:
class modbus_rtu
{
public:
template <typename T>
T round(T var, T scale);
然后创建对象并调用round
int main()
{
modbus_rtu object_modbus;
double c = object_modbus.round(1.0, 1.0);
}
发布于 2022-01-02 06:43:56
如何显式创建函数模板
我认为您的意思是说成员函数模板,而不仅仅是函数模板。
成员函数模板
在您的示例中,您应该将成员函数模板round<>
的实现移动到modbus.hpp,如下所示:
modbus.hpp
#ifndef MODBUSH_H
#define MODBUSH_H
#include <cmath>
class modbus_rtu
{
public:
template <typename T>
T round ( T var, T scale );
};
//implementation in header file instead of source file
template <typename T>
T modbus_rtu::round ( T var, T scale )
{
return std::round( var / scale ) * scale;
}
#endif
main.cpp
#include <iostream>
#include "modbus.hpp"
int main()
{
modbus_rtu obj;
double result = obj.round(2.1, 3.2);
return 0;
}
以下是我所作的改变:
round<>
实现移到modbus.hpp中。round<>
公开。程序的输出可以看到这里。
https://stackoverflow.com/questions/70551912
复制相似问题