テンプレート パラメーターとして符号なし整数を受け取るテンプレート クラスがありますが、その数値が素数であることを確認する必要があります。たとえば、コンストラクターで確認できますが、コンパイル時に行う方がよいでしょう。
私が使用している Assert テンプレートは次のとおりです。
template <bool statement>
class Assert;
template <>
struct Assert<true> {};
条件をパラメーターとして使用して、コンパイルされるコードの一部でこのタイプのオブジェクトを作成するだけで、その条件が false の場合はコンパイルされません。問題は、いくつかの数が素数であるかどうかを確認する必要があることです。nとする。
別のファイル「PrimeTest.h」を含め、そのファイル内から同じファイルを含めることにより、n-1 から 1 までの各数値で n を除算しようとする考えを思いつきました。それが私がそれを使用する方法です:
#define SUSPECT n
#include "PrimeTest.h"
これは「PrimeTest.h」です。
#ifdef SUSPECT
#ifndef CURRENT
#define CURRENT (SUSPECT-1)
#endif // CURRENT
#ifndef FINISHED
#if CURRENT>100
#define IS_PRIME
#define FINISHED
#else
#if SUSPECT%CURRENT==0
#define IS_NOT_PRIME
#define FINISHED
#else
#define CURRENT (CURRENT-1) // THAT DOES NOT WORK!!!
#include "PrimeTest.h"
#endif // SUSPECT % CURRENT != 0
#endif
#endif // FINISHED
#endif // SUSPECT
しかし、ここに問題があります。一時的な値や #pragma push_macro ディレクティブを含め、考えられる方法で CURRENT をデクリメントすることはできません。それを行う方法はありますか?