numaralı derlemede derlemenin asal sayı olup olmadığını kontrol edin Bir işaretsiz tamsayıyı şablon parametresi olarak alan bir şablon sınıfına sahibim, ancak bu numaranın bir asal olduğundan emin olmalıyım. Örneğin kurucuda kontrol edebilirim, ancak derleme sırasında bunu yapmak daha iyi olurdu.C++
İşte kullanıyorum belirt şablon var: Ben sadece parametre olarak benim koşulunu kullanarak, derlenmiş olacak kodun herhangi bir parçasında bu tip bir nesne oluşturabilir
template <bool statement>
class Assert;
template <>
struct Assert<true> {};
ve o kazandı Bu koşul yanlışsa derleme. Sorun şu ki, bazı rakamların asal olup olmadığını kontrol etmek zorundayım. Bırak n olsun.
"PrimeTest.h" adlı ayrı bir dosya ekleme ve n-1'den 1'e her dosyaya aynı dosyayı dahil ederek n'ye bölme girişiminde bulunmayı düşündüm.
#define SUSPECT n
#include "PrimeTest.h"
Bu "PrimeTest.h" dir:
#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
Ama burada sorun: Ben ile gelebilir hiçbir şekilde CURRENT azaltma olamaz, Ben onu nasıl kullandığımızdır geçici değerler ve #pragma push_macro yönergeleri dahil. Herhangi bir fikir nasıl yapılır?
Hangi derleyiciyi kullanıyorsunuz? Herhangi bir C++ 11 özelliğine erişiminiz var mı? – Yakk
Microsoft Visual C++ kullanıyorum ve henüz constexpr desteklemiyor. Ama sorun değil, ek şablon yapısı kullanarak bununla başa çıkmayı başardım. –
Ayep, kabaca eşdeğerdirler. Sadece küçük primlere ihtiyacınız varsa @ CygnusX1'in cevabı yapılacaktır. Aşağıda yaptığım "constexpr" yanıtı, daha büyük sayılara ihtiyaç duyarsanız şablon tabanlı çözümler için uyarlanabilir. – Yakk