1
に私はVS2010で、以下のプログラムをコンパイルすることができません。無限にコンパイルして、利用できないヒープになった。どんな助けでも大歓迎です。あなたはこのインナーテンプレートをインスタンス化コンパイルC++のメタプログラムは、VS2010
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();
問題は、あなたが部分的に定義されたことがないということです私は問題があなたのテンプレートコードであると信じて
#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;
}
これは正しいです。メタプログラミングは再帰を高度に使用し、再帰と同様に、常にループ終端が必要です。 – DanDan
ありがとうございました。 – Rajamohan