Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::ios_base::xalloc

      From cppreference.com
      <cpp‎ |io‎ |ios base
       
       
       
       
      staticint xalloc();

      Returns a unique (program-wide) index value that can be used to access onelong and onevoid* elements in the private storage ofstd::ios_base by callingiword() andpword(). The call toxalloc does not allocate memory.

      This function is thread-safe: concurrent access by multiple threads does not result in a data race.

      (since C++11)

      Effectively increments the next available unique index.

      Contents

      [edit]Return value

      Unique integer for use as pword/iword index.

      [edit]Example

      [edit]

      Uses base class pword storage for runtime type identification of derived stream objects.

      Run this code
      #include <iostream> template<class CharT,class Traits=std::char_traits<CharT>>class mystream:publicstd::basic_ostream<CharT, Traits>{public:staticconstint xindex;     mystream(std::basic_ostream<CharT, Traits>& ostr):std::basic_ostream<CharT, Traits>(ostr.rdbuf()){        this->pword(xindex)= this;} void myfn(){*this<<"[special handling for mystream]";}}; // Each specialization of mystream obtains a unique index from xalloc()template<class CharT,class Traits>constint mystream<CharT, Traits>::xindex= std::ios_base::xalloc(); // This I/O manipulator will be able to recognize ostreams that are mystreams// by looking up the pointer stored in pwordtemplate<class CharT,class Traits>std::basic_ostream<CharT, Traits>& mymanip(std::basic_ostream<CharT, Traits>& os){if(os.pword(mystream<CharT, Traits>::xindex)==&os)static_cast<mystream<CharT, Traits>&>(os).myfn();return os;} int main(){std::cout<<"cout, narrow-character test "<< mymanip<<'\n';     mystream<char> myout(std::cout);    myout<<"myout, narrow-character test "<< mymanip<<'\n'; std::wcout<<"wcout, wide-character test "<< mymanip<<'\n';     mystream<wchar_t> mywout(std::wcout);    mywout<<"mywout, wide-character test "<< mymanip<<'\n';}

      Output:

      cout, narrow-character testmyout, narrow-character test [special handling for mystream]wcout, wide-character testmywout, wide-character test [special handling for mystream]

      [edit]Defect reports

      The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

      DRApplied toBehavior as publishedCorrect behavior
      LWG 2143C++11xalloc was not thread-safemade thread-safe

      [edit]See also

      resizes the private storage if necessary and access to thevoid* element at the given index
      (public member function)[edit]
      resizes the private storage if necessary and access to thelong element at the given index
      (public member function)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/io/ios_base/xalloc&oldid=170167"

      [8]ページ先頭

      ©2009-2025 Movatter.jp