Bazı değişkenler üzerinde bazı denetimler gerçekleştiren ve bir değer döndüren ve sonuç olarak bir uyarı iletisi basan bir yönteme sahip bir sınıfım var. Yöntem herhangi bir sınıf değişkenini değiştirmediğinden, onu const olarak tanımladım. Ancak, çıkıştan su basmaktan kaçınmak için, birkaç (veya sadece bir) baskıdan sonra uyarı yazdırmayı bastırmak istiyorum. Yöntem yapısını koruyan bir çözüm bulamadım, bu mümkün mü (kolay)?Bir const yönteminden yazdırılan iletileri bastırın
cevap
mutable
sayacına ne dersiniz? Bence, kabul edilebilir olmalı, çünkü bu nesnenin durumu değil, içsel mantık halidir. Bu
class Printer
{
public:
Printer() : counter(0) {}
void output() const
{
if (counter++ < max_warnings)
{
std::cout << "Something special" << std::endl;
}
}
private:
static const size_t max_warnings = 5;
mutable size_t counter;
};
Sen (sonsuza gelen sayaç örneğe yapışmasını olabilir
class Printer
{
public:
Printer() : counter(0) {}
void output() const
{
if (counter++ < max_warnings)
{
std::cout << "Something special" << std::endl;
}
}
private:
static const size_t max_warnings = 5;
mutable std::atomic<size_t> counter;
};
+1 Ancak, çok iş parçacığı ile sorun yaşamadığınızdan emin olmalısınız. Bir yöntem 'const 'olarak işaretlenmişse, kullanıcılar genellikle MT-safe olmasını beklerler, bu yüzden bir atomik sayaç kullanmayı düşünebilirsiniz. –
@DanielFrey haklısınız, ama bence, bu örnek için fazla. – ForEveR
@DanielFrey bir hata bastırıcısı için küçük bir yarış koşulunu kabul edebilirdim, ama elbette daha hassas durumlarda bir de atomiklik eklemeliyim. – DarioP
atom sayaç ile çoklu kullanım, örneğin ilgili birçok yorum vardır yana gibi
şey
- , sen soruya bir kod parçası eklersiniz bu nesnenin çözümü gerçek sorun size bağlıdır
değil sayaç olarak bir değişken kullanın const_cast<int>(counter)
const
döküm?Tasarım gereği const_cast'den kaçınacağım ve sayacın herhangi bir örneğinin kendi sayacı olması gerektiğinden nesne içinde kalması gerekir. Bu durumun çok iyi uyum sağlayabileceğini düşünüyorum. Bir kod pasajı için lütfen ForEveR'in cevabına bakın, tam anlamı var. – DarioP
@DarioP: Anladım, bu yüzden bir kod snippet'i istedim :) ama soru başlığı bunu açık bırakıyor, bu yüzden önerim başkaları için bir seçenek olabilir.Ve _suppress messages_ kelimesi bana bir derleyici uyarısına karşı savaştığınız gibi görünüyordu ... – Wolf
... bu yüzden sorunuza bir değişiklik yaptım, bu da henüz onaylanmamış olabilir. – Wolf
- 1. Ekrana yazdırılan durağanlık testinin çıktısını bastırın
- 2. Stdout'u groovy yönteminden bir dizeye nasıl yerleştirilir?
- 3. Uygulama const dizelerini
- 4. Saklı yordamda işlemi bastırın
- 5. SBT tahliye uyarılarını bastırın
- 6. Dize yazdırılan python'u engelle
- 7. 'const decltype ((a))' bir const başvuru bildirmiyor?
- 8. Bu programdaki bir matris yazdırılan hata nerede?
- 9. const vs new const
- 10. Bir yönteminden dizeleri listesini alıyorum
- 11. XPS dosyasında yazdırılan görüntülerin kopyalanması
- 12. const
- 13. Yazdırılan barkod açık değil (WPF)
- 14. Django Sınama - iletileri yeniden yönlendiren bir görünüm için iletileri denetle
- 15. const nesne ve const yapıcı
- 16. const ve const {} in javascript
- 17. Operatörden const (const) algılama T &()
- 18. Bir ajax listener yönteminden bir yönlendirici gönderme
- 19. Sayfa yönteminden ayrı bir sayfa yönteminden özel nesnelerin bir listesini döndürmenin hızlı bir yolu
- 20. const char statik const dizi *
- 21. const başvuru bir
- 22. Beklenen Oracle istisnaları için PHP uyarılarını bastırın
- 23. Şablon bağımsız değişkendeki const/const-const uyuşmazlığı nasıl giderilir
- 24. ASP.NET Web API'sinde boş değerlerle özellikleri bastırın
- 25. onConfigurationchanged() yönteminden sonra çağrılanlar
- 26. const olmayan işaretçi argümanı bir const çift işaretçi parametresiyle
- 27. MVC'de bir denetleyici yönteminden diğerine veri geçirme
- 28. Bir sınıf yönteminden örnek değişken nasıl ayarlanır?
- 29. Bir Windows zamanlayıcıyı geri almak için yanlış pozitif uyarıyı bastırın
- 30. Neden "en önemli const" const olmalı?
Yerel sayaç işlevinizde statik değişken olarak tanımlayabilirsiniz. –