我有以下C++ 11兼容代码,我需要用C++ 98编译它,它不支持'.at'.如何重写它以与C++ 98兼容?
String suffix("sss");
headers_t& meta = ...;
typedef std::map<std::string, std::string> headerpair_t;
typedef std::map<std::string, headerpair_t> addheader_t;
addheader_t addheader;
for(headerpair_t::const_iterator piter = addheader.at(suffix).begin(); piter != addheader.at(suffix).end(); ++piter){
// Adding header
meta[(*piter).first] = (*piter).second;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试对我的代码进行一些优化,并希望在我执行耗时操作的地方生成一个线程。在实施该优化的过程中,我遇到了一个让我发疯的问题。我简化了问题并为该特定问题创建了一个测试用例:(我使用的是 SpringJUnit4ClassRunner,因此事务在 testCRUD 方法的开头正确启动)
有人能帮我理解为什么 foundParent 在线程中为空吗?
private Semaphore sema = new Semaphore(0, false);
private long parentId;
@Test
public void testCRUD() {
//create
DBParent parent = null;
{
parent = new DBParent();
parentDao.persist(parent);
parentId = parent.getId();
assertTrue(parentId > 0);
parentDao.flush();
}
(new Thread(
new Runnable() {
public void run()
{
System.out.println("Start adding childs !");
DBParent foundParent = parentDao.findById(parentId);
assertTrue(foundParent != null); //ASSERTION FAILS HERE !!!!
System.out.println("Releasing semaphore !");
sema.release();
System.out.println("End adding childs !");
}
})).start();
try {
System.out.println("Acquiring semaphore !"); …Run Code Online (Sandbox Code Playgroud)