使用类模板本身会遇到问题,该类模板本身在其某些成员函数中使用函数对象。 VS2010编译器的错误消息是:
缩减后的代码以重现此代码,如下所示:
// myfunctor.h
class SimpleFunctor
{
private:
SimpleFunctor( const SimpleFunctor& );
SimpleFunctor& operator=( const SimpleFunctor& );
public:
bool operator()() { return true; }
};
// mytemplate.h
#include "myfunctor.h"
template< typename T >
class Test
{
private:
Test( const Test& );
Test& operator=( const Test& );
public:
Test(){}
void testFunction( T parameter )
{
bool result = SimpleFunctor()();
}
};
// main.cpp
#include "HK_Template.h"
int main()
{
Test< int > obj;
obj.testFunction( 5 );
return 0;
}
此示例产生上述错误消息,由于在类SimpleFunctor中添加了默认构造函数,因此似乎是正确的:
SimpleFunctor() {}
解决错误。
所以问题是,为什么编译器不生成默认构造函数?
最佳答案
一旦您自己定义了任何构造函数,包括复制构造函数,编译器便不再生成默认构造函数。
(另一方面,如果您不提供复制/移动构造函数,则默认情况下会生成一个复制/移动构造函数)。