我有一个带有以下内容的头文件,例如<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
答案 0 :(得分:2)
<p>
是从属名称,要在mc
上调用模板化方法时,需要使用template
:
mc