实例化类型模板类的非类型模板成员函数

时间:2018-12-22 09:15:34

标签: c++ templates

我有一个带有以下内容的头文件,例如<a [routerLink]="[ '/resources' ]" routerLinkActive="currentUrl!='/resources'">

temp.hh

然后是另一个仅实例化函数#include <iostream> using namespace std; template <typename T1, typename T2> class MyClass { public: template <bool isTrue> void MyFunc(T1& t, T2 t2) const; }; template <typename T1, typename T2> template <bool isTrue> void MyClass<T1,T2>::MyFunc(T1& t, T2 t2) const { cout << t << " " << (int)t2 << " " << isTrue << endl; } 的头文件(temp2.hh):

MyFunc

在main.cpp中,我有以下内容:

#include "temp.hh"

template <typename T1, typename T2>
void TEST_OP2(MyClass<T1,T2> *mc)
{
    T1 a = 3;
    T2 b = 7;
    mc->MyFunc<false>(a, b);
}

错误是:

#include "temp2.hh"

int main(void)
{
    MyClass<int, int8_t>* myclass = new MyClass<int, int8_t>();
    /* The following 3 commented lines compiles and runs fine,
       if I only include temp.hh */
    // int a = 3;
    // int8_t b = 7;
    // myclass->MyFunc<false>(a, b);
    TEST_OP2<int, int8_t>(myclass); // !! this fails to compile !!
}

任何人都可以解释为什么会发生这种情况,以及如果可能的话该如何正确执行呢?

注意:如您所知,这只是一个示例代码,再现了我遇到的问题。在实际的项目中,由于各种原因,我无法在cpp文件中拥有temp2.hh:8:9: reference to non-static member function must be called mc->MyFunc<false>(a, b); 的完整实例化(就像上面MyFunc中的注释代码一样)。

编辑: 另外,如何在temp2.​​hh中获取MyFunc的函数指针?

@ rafix07的

ANSWER在评论中。这两种方法的工作原理如下所示。

main.cpp

1 个答案:

答案 0 :(得分:2)

<p>是从属名称,要在mc上调用模板化方法时,需要使用template

mc