C++98stlbeginner
std::locale::facet
C++98 · The Foundation · Compiler flag: -std=c++98
Explanation
The base class for locale-specific formatting categories like number formatting, collation, and character classification.
Real-World Scenario
Create a custom facet that formats phone numbers according to regional conventions.
Quick Snippet
snippet.cpp
#include <locale>
const std::numpunct<char>& np = std::use_facet<std::numpunct<char>>(std::locale());
char sep = np.thousands_sep();Full Example
locale_facet.cpp
// CodeNebula - C++98 Example: locale facets (numpunct)
// Compile: g++ -std=c++98 -Wall -Wextra -o example locale_facet.cpp
#include <iostream>
#include <locale>
#include <sstream>
#include <string>
// Custom numpunct facet that uses underscores as thousands separator
class MyNumpunct : public std::numpunct<char> {
protected:
virtual char do_thousands_sep() const { return '_'; }
virtual std::string do_grouping() const { return "\3"; }
virtual std::string do_truename() const { return "TRUE"; }
virtual std::string do_falsename() const { return "FALSE"; }
virtual char do_decimal_point() const { return '.'; }
};
int main() {
// Query the default numpunct facet
const std::numpunct<char>& np =
std::use_facet<std::numpunct<char> >(std::locale());
std::cout << "Default decimal point: '" << np.decimal_point() << "'" << std::endl;
std::cout << "Default thousands sep: '" << np.thousands_sep() << "'" << std::endl;
std::cout << "Default truename: " << np.truename() << std::endl;
std::cout << "Default falsename: " << np.falsename() << std::endl;
// Apply our custom facet
std::locale custom(std::locale(), new MyNumpunct);
std::ostringstream oss;
oss.imbue(custom);
oss << std::boolalpha << true << " " << false;
std::cout << "Custom boolalpha: " << oss.str() << std::endl;
// Format a number with custom thousands separator
std::ostringstream oss2;
oss2.imbue(custom);
oss2 << 1234567;
std::cout << "Custom number: " << oss2.str() << std::endl;
return 0;
}
// Expected output:
// Default decimal point: '.'
// Default thousands sep: ''
// Default truename: true
// Default falsename: false
// Custom boolalpha: TRUE FALSE
// Custom number: 1_234_567
Run command
g++ -std=c++98 -Wall -Wextra -o example locale_facet.cpp