İsim alanı ns
içinde STL kapsayıcıları yazdırmama yardımcı olan bir işlev var. Örneğin:boost :: format ve özel std kapsayıcıları yazdırma
std::set<std::string> x = { "1", "2", "3", "4" };
boost::format("%1%") % x;
sorun oldukça açıktır: Boost fikri yok boost::format
imkansız kullanarak Ancak
std::set<std::string> x = { "1", "2", "3", "4" };
std::cout << x << std::endl;
:
template <typename T>
std::ostream& operator<<(std::ostream& stream, const std::set<T>& set)
{
stream << "{";
bool first = true;
for (const T& item : set)
{
if (!first)
stream << ", ";
else
first = false;
stream << item;
}
stream << "}";
return stream;
}
Bu doğrudan operator <<
ile baskı için harika çalışıyor Benim özel operator <<
benim isim alanı ile ilgisi olmayan türleri yazdırmak için kullanmak istiyorum. boost/format/feed_args.hpp
'a using
bildiriminin eklenmesi dışında, benim operator <<
benim için uygun bir yol var mı?
Temel olarak ihtiyaçlarınıza cevap verdiğinden, bu soruya bir göz atın (http://stackoverflow.com/q/4850473/500104). Yinelemek için oy vermeyeceğim, çünkü asıl sorumunuz farklı olduğundan (operatör << 'hakkında). – Xeo
@Xeo: Gerçek kodum, herhangi bir kabın yazdırılması için çok benzer bir yaklaşım kullanıyor. Her neyse, sorun 'operatör <<' ile bir kap yazdırmak değil, Koenig istediğimi yapmazlar şeyler için aynı aşırı çalışma nasıl yapılır. –