编译c++元程序在VS2010
Compile C++ Meta Program in VS2010
我无法在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;
}
我相信问题出在你的模板代码中:
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
的部分专门化,当循环计数器达到某个值(例如,零)时终止,因此编译器只是不断实例化越来越多的loop_t
版本,count
的值越来越低,直到达到内部限制并报告错误。为了解决这个问题,您应该引入loop_t
的部分专门化,以便在计数器达到某个值(可能为零)时停止:
template<function_t** f> class loop_t<0, f>
{
public:
static inline void exec()
{
// Empty
}
};
希望这对你有帮助!
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- C++,系统无法执行指定的程序
- 程序错误,由于在VS2010中使用std::unique_ptr
- 卸载程序不会删除复制到VS2010安装程序项目中的系统文件夹。
- 在DLL中提供的ZeroMQ上下文单例在程序退出时崩溃(VS2010 win7 x64 zmq 4.0x)
- 在VS2010控制台应用程序中链接Windows.h (WNDCLASSEX)代码
- 非常简单的程序通过了VS2010 c++内存泄漏检查器,但在销毁所有对象后仍然在程序端使用更多内存
- Qt + VS2010:程序无法启动,因为<xyz>您的计算机中缺少.dll
- fgets 提供资产,试图重新分发 vs2010 MFC 应用程序
- VS2010 WITHOUT.NET中的Windows窗体应用程序
- 程序在VS2008中运行良好,在程序的最后在VS2010中抛出异常
- VS2010错误LNK2001:MFC静态应用程序中未解析的外部
- dll在VS2010项目中工作良好,但在VS6应用程序中提供访问违规
- 在Windows 7上构建的c++应用程序(使用VS2010 IDE和VS2008工具集)可以在Windows 7上运行
- 在VS2010中编译带有长双精度的Windows c++应用程序
- VS2010 Qt4设计器插件链接VS2010应用程序
- 编译c++元程序在VS2010
- 使用 VS2010 构建的可执行文件不是有效的 win32 应用程序;bindump 说它是一个 DLL
- Visual Studio 2008 - 为什么我的 VS2010 本机 C++ 应用程序不会突然启动,从而出现并排错误?
- VS2010 - 如何查看程序的内存使用情况?