如何使用任意模板参数调用方法?

时间:2016-02-21 15:19:35

标签: c++ templates

我在线获得了一个.hpp文件,它同时包含了类声明和定义:

//Foo.hpp
class Foo{
    Foo();

    <template T>
    Foo& func1(const &T t);
};

inline Foo::Foo(){
    //constructor
}

<template T>
Foo& Foo::func1(const T& t){
    //function 
}

我必须在多个源文件中包含此头文件(基本上是一个库)。由于它包含方法的定义,当我在项目中多次包含它时,我会重新声明(或重新定义,我忘记)错误。所以我决定将定义拆分成.cpp文件,并且我在main.cpp中使用库,如图所示。

//Foo.hpp
class Foo{
    Foo();
    <template T>
    Foo& func1(const T& t);
};

//Foo.cpp
#include "Foo.h"
Foo::Foo(){
    //constructor
} 

<template T>
Foo& Foo::func1(const T& t){
   //function 
}

用于函数调用

//main.cpp
#include "Foo.h"

int main (void){
    Foo bar;
    bar.func1(5);  //shows error as "undefined reference to"
    bar.func1<int>(5); //doesn't work either
}

根据我的发现,我认为应该通过实例化模板来声明模板的可接受类型。但是,我不知道这样做的语法和位置。提前感谢您的任何帮助。

仅供参考:作为临时解决方案,我已明确将参数类型声明为&#34; int&#34;对于Foo.hpp中的原型和Foo.cpp中的定义中的func1(),并将所有模板一起删除。没有错误返回。

这只是暂时的,因为还有许多其他类似的模板化函数如func1(),它似乎不是一个解决问题的好方法。我坚信&#34; int&#34;应该被声明为模板T的数据类型之一,我只是不知道如何。

0 个答案:

没有答案