दीर्घवृत्त के साथ कार्यों का उपयोग करना बहुत सुरक्षित नहीं है। यदि प्रदर्शन लॉग फ़ंक्शन के लिए महत्वपूर्ण नहीं है, तो ऑपरेटर को ओवरलोडिंग के रूप में उपयोग करने पर विचार करें :: प्रारूप। आप कुछ इस तरह लिख सकते हैं:
#include <sstream>
#include <boost/format.hpp>
#include <iostream>
using namespace std;
class formatted_log_t {
public:
formatted_log_t(const char* msg ) : fmt(msg) {}
~formatted_log_t() { cout << fmt << endl; }
template <typename T>
formatted_log_t& operator %(T value) {
fmt % value;
return *this;
}
protected:
boost::format fmt;
};
formatted_log_t log(const char* msg) { return formatted_log_t( msg ); }
int main ()
{
log("hello %s in %d-th time") % "world" % 10000000;
return 0;
}
निम्नलिखित नमूना दीर्घवृत्त के साथ संभावित त्रुटियों को प्रदर्शित करता है:
int x = SOME_VALUE;
double y = SOME_MORE_VALUE;
printf( "some var = %f, other one %f", y, x ); // no errors at compile time, but error at runtime. compiler do not know types you wanted
log( "some var = %f, other one %f" ) % y % x; // no errors. %f only for compatibility. you could write %1% instead.