使用模板将任何类型的参数传递给c ++中的函数

时间:2017-07-24 13:12:11

标签: c++ templates

我想将any-type参数传递给我的函数func1()。 所以这是我的代码: myclass.h

public:
   myclass();
   template<typename T> void func1(T object);

myclass.cpp

template<typename T> 
void myclass::func1(T object)
{
    return;
}

main.cpp

int a=0;
myclass::func1<int>(a);

但我收到了这个错误:

error: cannot call member function 'void myclass::func1(T) [with T = int]' without object

我的错误在哪里?

1 个答案:

答案 0 :(得分:5)

您不能简单地在模板函数中分隔声明和定义。对模板函数最简单的方法是在头文件中的函数声明中提供代码体。

如果要在没有类对象的情况下调用该函数,请在函数签名中添加static。

header.hpp

#include <iostream>

class test_class{
public:
     template<typename T> static void member_function(T t){
        std::cout << "Argument: " << t << std::endl;
    }

};

的main.cpp

#include <iostream>

#include "header.hpp"

int main(int argc, char ** argv){

    test_class::member_function(1);
    test_class::member_function("hello");
}