小编Pau*_*ulH的帖子

使用一个映射中的迭代器作为键类型到另一个映射

我有一个Visual Studio 2008 C++ 03应用程序,我想在其中创建一个std::map使用另一个迭代器std::map作为其键类型的迭代器.但是,当我尝试使用其键类型从该映射中擦除元素时,我遇到了问题.

在此示例中,当一个元素MyList变为超过5分钟时,计时器应该触发并将其从地图中删除并销毁其年龄计时器.

typedef std::map< Foo, FooBar > MyList;
typedef std::map< MyList::iterator, boost::shared_ptr< Timer > > MyListAgeTimers;

class A
{
public:

    void AddItem( Foo& f, FooBar& fb )
    {
        CriticalSection::Guard g( lock_ );
        std::pair< MyList::iterator, bool > new_foo = 
            my_list_.insert( std::make_pair( f, fb ) );
        if( new_foo.second )
        {
            timers_.insert( std::make_pair( 
                new_foo.first, 
                boost::make_shared< Timer >( FiveMinutes, boost::bind( &A::OnAgeTimer, this, new_foo.first ) ) ) );
        }
    };

    void OnAgeTimer( MyList::iterator item ) …
Run Code Online (Sandbox Code Playgroud)

c++ compiler-errors stdmap map

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

我可以将长数组初始化减少到C中的短初始化列表吗?

我有一些看起来像这样的C99代码:

struct foo {
    char* buf;
    size_t buf_sz;
};

struct foo list[3];
list[0].buf = "The first entry";
list[0].buf_sz = strlen(list[0].buf);
list[1].buf = "The second entry";
list[1].buf_sz = strlen(list[1].buf);
list[2].buf = "The third entry";
list[2].buf_sz = strlen(list[2].buf);
Run Code Online (Sandbox Code Playgroud)

有没有在初始化列表中写这个的简写方法?这样安全吗?

struct foo list[] = {
    { "The first entry", strlen(list[0].buf) },
    { "The second entry", strlen(list[1].buf) },
    { "The third entry", strlen(list[2].buf) }
};
Run Code Online (Sandbox Code Playgroud)

c

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

使用类成员初始化父类

我有一个这样的basic_iostream派生类:

class MyStream : public std::basic_iostream< char >, 
                 private boost::noncopyable
{
public:
    explicit MyStream( SomeUsefulData& data ) : 
        buffer_( data ),
        std::basic_iostream< char >( &buffer_ )
    {
    };

    ~MyStream()
    {
    };

private:
    /// internal stream buffer
   MyStreamBuffer< char > buffer_;
}; // class MyStream
Run Code Online (Sandbox Code Playgroud)

但是,当我创建它的实例时,我得到一个DataAbort异常.

SomeUsefulData data;
MyStream stream( data );  // <- Data Abort
Run Code Online (Sandbox Code Playgroud)

但是,如果我将MyStream更改为堆分配MyStreamBuffer,它可以正常工作:

class MyStream : public std::basic_iostream< char >, 
                 private boost::noncopyable
{
public:
    explicit MyStream( SomeUsefulData& data ) : 
        std::basic_iostream< char >( new MyStreamBuffer< char >( …
Run Code Online (Sandbox Code Playgroud)

c++

0
推荐指数
1
解决办法
156
查看次数

从`const char*[2]`转换为pair <string,string>

我有一个Visual Studio 2008 C++应用程序,其中包含一个const char*[2]我想要转换为a的参数std::pair< std::string, std::string >.有一个简单的方法吗?

例如:

typedef std::pair< std::string, std::string > Group;
const char* a[ 2 ] = { "buzz", "foo" };
Group z = a; // ???

// a->first.c_str() == "buzz"
// a->second.c_str() == "foo"
Run Code Online (Sandbox Code Playgroud)

谢谢,PaulH

c++ string stl std-pair

0
推荐指数
1
解决办法
267
查看次数

标签 统计

c++ ×3

c ×1

compiler-errors ×1

map ×1

std-pair ×1

stdmap ×1

stl ×1

string ×1