首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何显式创建函数模板

如何显式创建函数模板
EN

Stack Overflow用户
提问于 2021-12-29 13:06:18
回答 2查看 57关注 0票数 0

modbus.hpp

代码语言:javascript
运行
复制
class modbus_rtu
{
    template <typename T>
    T round ( T var, T scale );
};

modbus.cpp

代码语言:javascript
运行
复制
template <typename T>
T modbus_rtu::round ( T var, T scale )
{
    return std::round( var / scale ) * scale;
}

我知道我需要显式地创建一个函数模板,但是我完全忘记了它是如何实现的。请告诉我在哪里和如何添加函数模板。调用类型:double, float

EN

回答 2

Stack Overflow用户

发布于 2022-01-02 03:28:13

要在类方法中调用循环,只需像任何其他方法一样调用它,例如:

代码语言:javascript
运行
复制
class modbus_rtu
{

    template <typename T>
    T round(T var, T scale);

    void function_special() { round(1.0, 1.0); }
};

要使用modbus_rtu对象调用,您首先需要公开round

代码语言:javascript
运行
复制
class modbus_rtu
{

public:
    template <typename T>
    T round(T var, T scale);

然后创建对象并调用round

代码语言:javascript
运行
复制
int main()
{
    modbus_rtu object_modbus;
    double c = object_modbus.round(1.0, 1.0);
}
票数 0
EN

Stack Overflow用户

发布于 2022-01-02 06:43:56

如何显式创建函数模板

我认为您的意思是说成员函数模板,而不仅仅是函数模板。

成员函数模板

在您的示例中,您应该将成员函数模板round<>的实现移动到modbus.hpp,如下所示:

modbus.hpp

代码语言:javascript
运行
复制
#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

代码语言:javascript
运行
复制
#include <iostream>
#include "modbus.hpp"
int main()
{
    modbus_rtu obj;
    double result = obj.round(2.1, 3.2);
    return 0;
}

以下是我所作的改变:

  1. 添加了头保护在modbus.hpp,这是推荐的。
  2. round<>实现移到modbus.hpp中。
  3. 使成员函数模板round<>公开。

程序的输出可以看到这里

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70551912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档