我在使用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) 本周我发现了关于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) 当我减去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)