WTL头文件如何实现?

How to implement out of WTL header file?

WTL是模板库,必须在模板库头文件中实现。

我想在 .cpp 文件中实现我的逻辑,否则,我将不得不编写一个巨大的头文件。

例如,在MainFrm.h

// ...
// MainFrm.h
class CMainFrame : 
    public CFrameWindowImpl<CMainFrame>, 
    public CUpdateUI<CMainFrame>,
    public CMessageFilter, public CIdleHandler
{
  //...
  void function1()
  {
    //...
  }

  void function2()
  {
    //...
  }
}

我想在myfunction.cpp里有function1()function2(),怎么办?

请指导。

编辑:

已解决!感谢 Jan S。我将 myfunction.cpp 包含到 WTL 项目中并添加了一些行:

MainFrm.h:

// ...
// MainFrm.h
#if 1
#include <atlframe.h>
#include <atlsplit.h>
#include <atlctrls.h>
#include <atlctrlw.h>
#include <atlctrlx.h>
#include "sampleView.h"
#include "resource.h"
#endif

// MainFrm.h
class CMainFrame : 
    public CFrameWindowImpl<CMainFrame>, 
    public CUpdateUI<CMainFrame>,
    public CMessageFilter, public CIdleHandler
{
  //...
  void functionx();
  //...
};

myfunction.cpp:

// myfunction.cpp
#include "stdafx.h" 
#include "MainFrm.h"
void CMainFrame::functionx()
{
  //...
}

在你的header中放置声明

// MainFrm.h
class CMainFrame : 
    public CFrameWindowImpl<CMainFrame>, 
    public CUpdateUI<CMainFrame>,
    public CMessageFilter, public CIdleHandler
{
  //...
  void functionx();
  //...
};

在您的 .cpp 文件中放入定义

#include MainFrm.h

void CMainFrame::functionx()  
{  
    // more code  
} 

编译错误

您似乎缺少 WTL header 包括

#include <atlframe.h>
#include <atlsplit.h>

题外话但是,在你的header中确保你有

#pragma once

#ifndef UNIQUE_HEADER_NAME
#define UNIQUE_HEADER_NAME
//header code
#endif

这将停止重复声明。