ben farklı the documentation anlıyorum:
İade: bir işaretçi geçirilen Eğer başarılı, aksi boş döndürülür eğer, değerin içeriğine benzer nitelikli gösterici ile döner. T ValueType ise, T (muhtemelen const nitelikli) ValueType, bu tutulan değerine bir referans resmi belgeler ise, bu, aksi takdirde, elde tutulan değerinin bir kopyasını verir.
Atmalar: atmayın bir herhangi işaretçisi alarak Overloads; başarısız olursa bir herhangi değeri veya referans alarak aşırı yükler bad_any_cast atar. Yani
:
dönüşüm başarılı veya başarısız saklanan tipi ve hedef türüne bağlıdır.
olsa başarısızlık tezahürü, sen any_cast
veya olmasın bir işaretçi geçmesi olmadığına bağlıdır. Bir işaretçiyi iletirseniz, tezahürü bir nullptr
; aksi halde tezahür, bir istisnadır.
örneğin bu kodu düşünün:
#include <boost/any.hpp>
#include <iostream>
int main() {
boost::any a = 1;
Bu sorunuzu ifadeyi çelişir görünen - bir işaretçi alır, çünkü o atmak yok, ama işaretçi nullptr
geçerli:
bool *p = boost::any_cast<bool>(&a);
// Prints true
std::cout << std::boolalpha << (p == nullptr) << std::endl;
Bu sorun yok zaman nasıl görünüyor geçerli:
int *q = boost::any_cast<int>(&a);
// Prints false
std::cout << std::boolalpha << (q == nullptr) << std::endl;
o bir işaretçi almaz çünkü
Bu, atar:
bir dize depolanan türü için
try {
boost::any_cast<bool>(a);
}
catch(...) {
std::cout << "caught" << std::endl;
}
aynı: "Ben bu şekilde kolumu hareket ettirdiğinizde Doktor, acıyor"
a = std::string { "Boost" };
p = boost::any_cast<bool>(&a);
// Prints true
std::cout << std::boolalpha << (p == nullptr) << std::endl;
try {
boost::any_cast<bool>(a);
}
catch(...) {
std::cout << "caught again" << std::endl;
}
}
... "Eh, kolunu bu şekilde hareket ettirme." –
'v = boost :: any a = 1; bool * p = boost :: any_cast (&a); // tamam, kötü cast istisnası ne? Hayır, bu gerçekleşmez. –
Yakk
Teşekkür ederim, haklısın, Ami Tavory'nin de yanlış kod bölümüne baktığını belirtti. Ancak açıklaması açık olduğundan, söz konusu kodu güncelledim. –