boost::ref(i)
ve & i
arasındaki fark nedir? Düzenli referansları kullanamadığımız ve bunun yerine boost::ref
'a gitmemiz gereken durumlar nelerdir? Mümkünse lütfen örnekleri ekleyin. Boost.Ref Documentation kaynaktanBoost :: ref ve düzenli başvurular arasındaki fark
cevap
:
öncelikle şablonları işlev referanslar "besleme" için kullanılan tipi T bir nesne için bir başvuru içeren boost :: reference_wrapper amacı Parametrelerini değerini alarak alan (algoritmalar).
Not: boost::reference_wrapper
ve std::reference_wrapper
arasındaki önemli bir fark (Boost 1.52 en az), mükemmel işlevi, nesne sarmak için std::reference_wrapper
yeteneğidir.
Bu, böyle bir kod sağlar:
örneğin Boost.Thread olarak// functor that counts how often it was applied
struct counting_plus {
counting_plus() : applications(0) {}
int applications;
int operator()(const int& x, const int& y)
{ ++applications; return x + y; }
};
std::vector<int> x = {1, 2, 3}, y = {1, 2, 3}, result;
counting_plus f;
std::transform(begin(x), end(x), begin(y),
std::back_inserter(result), std::ref(f));
std::cout << "counting_plus has been applied " << f.applications
<< " times." << '\n';
:
yeni bir iplik herhangi bir parametre ile çağrılan olabilir bir çağrılabilir tipte bir nesne geçirilmesiyle başlatılanyapıcısına. Nesne daha sonra iç depolama birimine kopyalanır ve yeni oluşturulmuş iş parçacığı 'da çağrılır. Nesnenin kopyalanmaması (veya gerçekleştirilememesi) durumunda, boost :: ref, nesnesinin nesnesinin bir işlevine başvurmak için kullanılabilir. Bu durumda, Boost.Thread kullanıcısı, atıfta bulunulan nesnenin, yeni oluşturulmuş iş parçacığı 'u aşmasını sağlamalıdır. dokümandan
Kodu:
struct callable
{
void operator()();
};
boost::thread copies_are_safe()
{
callable x;
return boost::thread(x);
} // x is destroyed, but the newly-created thread has a copy, so this is OK
boost::thread oops()
{
callable x;
return boost::thread(boost::ref(x));
} // x is destroyed, but the newly-created thread still has a reference
// this leads to undefined behaviour
- 1. Firebase - Ref ve çocuk arasındaki fark nedir?
- 2. Boost :: io_service poll_one ve run_one arasındaki fark nedir?
- 3. Boost akümülatöründe tembel ortalama ve acil ortalama arasındaki fark nedir?
- 4. Python ve Javascript düzenli ifadeleri arasındaki fark nedir?
- 5. MySQL ve MariaDB Sorgulama planı arasındaki fark
- 6. boost :: range_iterator ve boost :: iterator_range karışıklığı
- 7. 'two' İki düzenli ifade arasındaki düzenli ifade
- 8. Boost :: asio ve boost :: thread
- 9. rvalue başvurular
- 10. XeLaTeX ve pdfLaTeX arasındaki fark
- 11. javax.sql ve java.sql arasındaki fark?
- 12. netTcpContextBinding ve netTcpBinding arasındaki fark
- 13. Sürücü ve sağlayıcı arasındaki fark
- 14. HttpCookie ve Çerez arasındaki fark?
- 15. typedef arasındaki fark ve tanımlamak
- 16. Python'da {} ve [] arasındaki fark nedir?
- 17. Dize [] ve [dize] arasındaki fark
- 18. Redis ve kafka arasındaki fark
- 19. mapM ve forM arasındaki fark
- 20. ASCIIEncoding ve Encoding Arasındaki Fark
- 21. NSLog ve DLog arasındaki fark
- 22. jsRender ve jsViews arasındaki fark
- 23. UNIX'teki $ @ ve $ * arasındaki fark nedir?
- 24. java.util.Scanner ve java.util.Scanner arasındaki fark. *
- 25. ServiceProcessInstaller ve ServiceInstaller arasındaki fark
- 26. string.h ve strings.h arasındaki fark
- 27. dtrtrs ve dtrsm arasındaki fark
- 28. Kodlama ve harmanlama arasındaki fark?
- 29. IsGenericType ve IsGenericTypeDefinition arasındaki fark
- 30. autoconf ve autoreconf arasındaki fark
@Venkat Shiva: durum ve "algoritmalar değeriyle kendi parametresi alması gerektiğinde" Sen değeriyle bir nesne geçme performans kaybına yol istemiyoruz olduğunu . –
Soruları göndermeden önce belgeleri doğru şekilde okumalıyım. Sorun için üzgünüm. –