Force Boost TypeIndex, um einen bestimmten pretty_name zu melden

9

Ich möchte angeben, dass ein bestimmter Typ, der von Boost TypeIndex boost::typeindex::type_id<T>().pretty_name() gemeldet wird, einen bestimmten Namen ergeben würde.

Das Problem, das ich lösen möchte, ist, dass, wie an anderen Stellen berichtet, ein bestimmter Fall verwirrend ist, das heißt, der std::string -Typ (oder Alias) wird als std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > gemeldet.

(Ich verstehe den Grund dafür, std::string ist ein Alias. Ich möchte nur die gemeldete Zeichenfolge in diesem speziellen Fall überschreiben.)

Ich folgte den Anweisungen hier Ссылка und dem Beginn des benutzerdefinierter Code sieht folgendermaßen aus:

%Vor%

Aber am Ende kann ich höchstens einen Berichtstyp durch einen anderen ersetzen, anstatt nur einen Fall zu ändern.

Eine leichtgewichtige Lösung könnte die Spezialisierung boost::typeindex::stl_type_index (der Ausgabetyp von type_id<std::string>() ) sein, aber bis dahin ist die tatsächliche statische Information der Klasse verloren. (Es gibt keine zu spezialisierende Klasse.)

Aber das kann nicht ohne eine vollständige Spezialisierung von typeid<std::string> getan werden, die schwierig zu tun scheint.

Gibt es einen Workaround dafür? Ich würde lieber eine Lösung in Boost.Typeindex als eine Laufzeit-String-Ersetzung bevorzugen.

Das ist eine sehr schmutzige Art, die ich gefunden habe, aber sie ist nicht perfekt und kann andere Probleme auf der Straße verursachen.

%Vor%     
alfC 05.03.2017, 17:13
quelle

0 Antworten

Tags und Links