如何使用模板声明成员函数? (不是模板类)

Posted

技术标签:

【中文标题】如何使用模板声明成员函数? (不是模板类)【英文标题】:how to declare member function using template? (not template class) 【发布时间】:2019-11-30 08:12:40 【问题描述】:

我想在类中声明一个模板成员函数。 据我所知,我们可以在 case1 下声明。 但它会做几个类,但我只想做一个类。 我不会使用模板来设置成员变量。我只会将它用于成员函数的参数。我想制作可以在一个类实例中处理不同类型的模板函数。 那么,有没有办法在一个类中制作模板功能?

//case1, standard template function
#include <iostream>
using namespace std;

template <typename T>
class A
     public:
       void f(T n)
         cout << n <<endl;
       
;

int main()
    A<int> a1;
    a1.f(1);
    A<float> a2;
    a2.f(0.1);


//case2, i want to make member function which can receive vary type.
#include <iostream>
using namespace std;

class A
      public:
        template <typename T>
        void f(T n)
           cout << n <<endl;
        


int main()
   A a();
   a.f(1);
   a.f(0.1);

【问题讨论】:

这个A a();是函数声明(阅读更多关于c++中的most vexing parse),你想要A a; 你试过了吗?你遇到了什么问题? 抱歉造成混淆。看起来对构造函数而不是模板存在一些误解。谢谢 【参考方案1】:

在修正了几个小错别字后,您的代码对我有用:

#include <iostream>
using namespace std;

class A
      public:
        template <typename T>
        void f(T n)
           cout << n <<endl;
        
;

int main()
   A a;
   a.f(1);
   a.f(0.1);

$ g++ main.cc

./a.out

1

0.1

【讨论】:

抱歉造成混淆。看起来对构造函数而不是模板存在一些误解。谢谢

以上是关于如何使用模板声明成员函数? (不是模板类)的主要内容,如果未能解决你的问题,请参考以下文章

类模板的声明和使用

类模板模板类函数模板模板函数

如何检测类中是不是存在特定的成员变量?

如何检查 C++ 类是不是不完整(仅声明)?

如何在 cpp 文件中为多种类型创建模板类成员实现

一起使用模板和继承时,不知道如何覆盖成员函数