小编Hen*_*and的帖子

实现自定义(字符串)流时,Xcode 4.5.2 libc ++ std :: bad_cast

我在使用char16_t作为char类型实现我自己的自定义stringbuf和stringstream时遇到问题.作为测试,我使用了nullstringbuf和nullstringstream,我在旧的,可能是过时的C++手册中找到了.此nullstringstream充当"/ dev/null"并且是一个简单的实现.
这个简单的nullstream在我使用时工作<char>但在我使用时失败并带有std :: bad_cast异常<char16_t>.我知道必须有一个char_traits<char16_t>可用但libc ++似乎有它存在.

     class nullstringbuf : public std::basic_stringbuf<char16_t>
     {
     public:
        nullstringbuf( )
        {
           setp(0,0);
           setg(0,0,0);
        }


        virtual ~nullstringbuf()
        {

        }

        virtual int_type underflow()
        {
           setg(0,0,0);
           return traits_type::eof();
        }


        virtual int overflow(int c)
        {
           setp(0,0);
           if ( c==traits_type::eof() )
              return 0;

           return c;
        }


     };



     class nullstringstream : virtual public std::basic_stringstream<char16_t>
     {
     public:
        // Constructor(s)
        nullstringstream(std::ios_base::openmode om = std::ios_base::out | std::ios_base::in)
        : std::basic_stringstream<char16_t>(om)
        {
           init(&m_StreamBuf);
        }

        nullstringstream(base::xstring const& val, std::ios_base::openmode om = …
Run Code Online (Sandbox Code Playgroud)

c++ iostream

5
推荐指数
1
解决办法
398
查看次数

是否有比boost :: object_pool更快的C++堆分配/释放机制?

本周我发现了关于boost :: object_pool的内容,并且惊讶于它比普通的new&delete快了大约20-30%.

为了测试,我编写了一个小型C++应用程序,它使用boost :: chrono来计算不同的堆分配器/解除分配器(shared_ptr).函数本身使用'new'和'delete'进行60M迭代的简单循环.在代码下面:

#include <iostream>

#include <memory>
using std::shared_ptr;

#include <boost/smart_ptr.hpp>
#include <boost/chrono.hpp>
#include <boost/chrono/chrono_io.hpp>
#include <boost/pool/object_pool.hpp>

#include <SSVUtils/SSVUtils.h>

#include "TestClass.h"

const long lTestRecursion = 60000000L;

void WithSmartPtrs()
{
    boost::chrono::system_clock::time_point startTime = boost::chrono::system_clock::now();
    std::cout << "Start time: " << startTime << std::endl;

    for (long i=0; i < lTestRecursion; ++i)
    {
        boost::shared_ptr<TestClass> spTC = boost::make_shared<TestClass>("Test input data!");  
    }

    boost::chrono::system_clock::time_point endTime = boost::chrono::system_clock::now();
    std::cout << "End time: " << endTime << std::endl;

    boost::chrono::duration<double> d = endTime - startTime;
    std::cout …
Run Code Online (Sandbox Code Playgroud)

c++ boost

5
推荐指数
1
解决办法
940
查看次数

boost chrono endTime - startTime在boost 1.51中返回负数

当我减去endTime - startTime时,我的macbook pro上的boost chrono library vs1.51返回负数.如果打印时间点,则会看到结束时间早于startTime.怎么会发生这种情况?

typedef boost::chrono::steady_clock clock_t;
clock_t clock;

// Start time measurement
boost::chrono::time_point<clock_t>  startTime = clock.now();
short test_times = 7;

// Spend some time...
for ( int i=0; i<test_times; ++i )
{
   xnodeptr spResultDoc=parser.parse(inputSrc);

  xstring sXmlResult = spResultDoc->str();
  const char16_t* szDbg = sXmlResult.c_str();

  BOOST_CHECK(spResultDoc->getNodeType()==xnode::DOCUMENT_NODE && sXmlResult == sXml);
}

// Stop time measurement
boost::chrono::time_point<clock_t> endTime = clock.now();
clock_t::duration elapsed( endTime - startTime);

std::cout << std::endl;
std::cout << "Now time: " << clock.now() << std::endl;
std::cout << …
Run Code Online (Sandbox Code Playgroud)

c++ boost c++-chrono

3
推荐指数
1
解决办法
1425
查看次数

标签 统计

c++ ×3

boost ×2

c++-chrono ×1

iostream ×1