我有一个基类First
和一个派生类Second
。在基类中有一个成员函数create
和一个虚函数run
。在Second
我想调用函数的构造函数中First::create
,该函数需要访问其子类run()
函数的实现。一位同事建议使用函数模板,因为First
无法明确知道它是子类。听起来怪怪的?这是一些代码:
第一.h
#pragma once
#include <boost/thread/thread.hpp>
#include <boost/chrono/chrono.hpp>
class First
{
public:
First();
~First();
virtual void run() = 0;
boost::thread* m_Thread;
void create();
template< class ChildClass >
void create()
{
First::m_Thread = new boost::thread(
boost::bind( &ChildClass::run , this ) );
}
};
第一个.cpp
#include "First.h"
First::First() {}
First::~First() {}
第二个.h
#pragma once
#include "first.h"
class Second : public First
{
public:
Second();
~Second();
void run();
};
第二个.cpp
#include "Second.h"
Second::Second()
{
First::create<Second>();
}
void Second::run()
{
doSomething();
}
我在First::create<Second>();
说Error: type name is not allowed时遇到错误。那么这个错误的原因是什么?我假设我还没有完全了解模板的全部机制 - 我对这个主题很陌生。