我无法在VS2010中编译以下程序。保持编译无穷无尽,进入堆不可用。非常感谢任何帮助。
#include <iostream>
class function_t
{
public:
virtual void operator ()()=0;
};
class greet_t : public function_t
{
public:
virtual void operator()(){ std::cout << "hello world" << std::endl;}
};
template<int count, function_t** f> class loop_t
{
public:
static inline void exec()
{
(*(*f))();
loop_t< count-1, f>::exec();
}
};
function_t* f;
int _tmain(int argc, _TCHAR* argv[])
{
f = new greet_t();
loop_t<1, &f>::exec();
return 0;
}
答案 0 :(得分:6)
我认为问题出在您的模板代码中:
template<int count, function_t** f> class loop_t
{
public:
static inline void exec()
{
(*(*f))();
loop_t< count-1, f>::exec();
}
};
请注意,您实例化了此内部模板:
loop_t< count-1, f>::exec();
问题是你从未定义loop_t
的部分特化,当循环计数器达到某个值(比如零)时终止,因此编译器只是继续实例化越来越多的{ {1}} loop_t
的值越来越低,直到达到内部限制并报告错误。要解决此问题,您应该引入count
的部分特化,以便在计数器达到某个值(可能为零)时暂停:
loop_t
希望这有帮助!