使用额外的模板参数编译函数

时间:2016-03-26 00:29:42

标签: c++ templates

我有以下代码:

文件main.cpp:

loess.control(surface = "direct")

文件A-inl.h

#include <iostream>
#include "A.h"
class X{};
int 
main()
{   
    X x;
    A<X> a(x);
}   

档案A.h

#include <iostream>
template <class T1>
A<T1>::A(T1 t)
{
}
template <class T1>
void A<T1>::foo(T1 t1)
{
}
template <class T1, class T2>
void A<T1>::bar(T1 t, T2 t2)   // Compilation Problem
{
}

g ++ -g main.cpp

template <class T1>
class A
{
public:
    explicit A(T1 t1);
    void foo(T1 t1);
    template <class T2>
    void bar(T1 t1, T2 t2); // Compilation Problem
};
#include "A-inl.h"

请告诉我如何申报吧? 还有一个问题是,我是否可以创建一个对象A a;我不知道T2的类型吧?如何生成条形码。

由于

1 个答案:

答案 0 :(得分:0)

你的标题声明没问题;但请尝试在函数定义的内联文件中执行此操作。

template<class T1>
template<class T2>
void A<T1>::bar( T1 t, T2 t2 ) {
}

现在解决,编译和构建;至少在Visual Studio 2015社区中它确实如此。

这不起作用:

template<class T1, class T2>
void A<T1>::bar( T1 t, T2 t2 ) {
}

因为您的标题声明与您的内联函数定义不匹配,所以您在类模板中声明模板函数的方式如下:

template<class T2>
void bar( T1 t, T2 t2 );

这就是为什么你需要声明类模板所需的template<class T1>,然后你需要为模板函数声明template<class T2>,因为你在类模板中声明了它。 / p>