使用类模板本身会遇到问题,该类模板本身在其某些成员函数中使用函数对象。 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() {}

解决错误。

所以问题是,为什么编译器不生成默认构造函数?

最佳答案

一旦您自己定义了任何构造函数,包括复制构造函数,编译器便不再生成默认构造函数。

(另一方面,如果您不提供复制/移动构造函数,则默认情况下会生成一个复制/移动构造函数)。

09-10 05:56
查看更多