C++ 编译器如何处理间接方法类型推断?
当我总是使用模板时,我总是创建一个名为Test.h的文件。这将包括模板化的签名以及与之相关的定义 我开始使用模板成员函数,并注意到如果成员调用模板方法,我可以将声明与实现分开。这怎么可能,因为我认为编译器需要生成模板化方法 编译失败的原始示例C++ 编译器如何处理间接方法类型推断?,c++,c++11,c++14,C++,C++11,C++14,当我总是使用模板时,我总是创建一个名为Test.h的文件。这将包括模板化的签名以及与之相关的定义 我开始使用模板成员函数,并注意到如果成员调用模板方法,我可以将声明与实现分开。这怎么可能,因为我认为编译器需要生成模板化方法 编译失败的原始示例 MyTest.h class MyTest { public: MyTest(); ~MyTest(); template <typename T> int testMethod(T&&
MyTest.h
class MyTest
{
public:
MyTest();
~MyTest();
template <typename T>
int testMethod(T&& var);
};
class MyTest
{
private:
template <typename T>
int testMethod(T&& var);
public:
MyTest();
~MyTest();
void testMethod2();
};
然而,当我有另一个成员调用它时,它就可以工作了,并且main不能直接访问它
MyTest.h
class MyTest
{
public:
MyTest();
~MyTest();
template <typename T>
int testMethod(T&& var);
};
class MyTest
{
private:
template <typename T>
int testMethod(T&& var);
public:
MyTest();
~MyTest();
void testMethod2();
};
问问自己,在实例化模板化方法时,翻译单元是否有该函数的可用定义?啊,好的,这是一个很好的思考方法。非常感谢。问问自己,在实例化模板化方法时,翻译单元是否有该函数的可用定义?啊,好的,这是一个很好的思考方法。非常感谢。
#include "MyTest.h"
MyTest::MyTest()
{
};
MyTest::~MyTest()
{
};
template <typename T>
int MyTest::testMethod(T&& var)
{
return 0;
}
void MyTest::testMethod2()
{
testMethod(5);
}
#include "MyTest.h"
int main()
{
MyTest testClass;
testClass.testMethod2();
return 0;
}