小编Pol*_*878的帖子

从对象中获取项目集合的最佳实践?

我正在专门处理C++,但这确实与语言无关.

只是为了给出问题的一些背景...我有一个基于树/图的结构,其中每个节点都包含多个项的集合.

我有一个类封装了一些通用集合(list,map,vector,LinkedList,等等).我希望能够以最有效的方式从该集合中获取所有项目,而无需客户端编辑私有集合.

这是我所拥有的简化示例:

class MyClass
{
public:
    // Basic constructors and such
    void AddItem(int item) { _myItems->push_back(item); }

private:
    list<int>* _myItems;
};
Run Code Online (Sandbox Code Playgroud)

显然,检索指向_myItems的指针的getter不起作用,因为这将允许客户端编辑_myItems.

尝试1:
我可以创建一个新列表并返回指向该列表的指针......但是我不喜欢这个想法,因为创建和删除的责任现在位于不同的对象中.

尝试2:
我认为最好创建一些CopyTo方法,例如:

void CopyItemsToList(list<int>* inList) { // copy the items to client list }
Run Code Online (Sandbox Code Playgroud)

这样,客户端负责mem管理,并且很容易扩展它以允许更多的数据结构.我对这种方法的关注是成本......列表可能非常大,复制项目的成本可能会很高

尝试3:
只需使用值类型并返回(让复制构造函数处理它),而不是保持指向类中列表的指针.但是,这似乎是性能成本与#2相同......

无论如何,还有其他任何方式去做吗?让我知道你们的想法......谢谢.

c++ oop

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

提升相当于memcpy?

memcpy是否有相应的提升?谢谢!

编辑:对不起,我没有意识到memcpy是在标准库:)我以为这是一个操作系统调用:(

c c++ boost

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

带网络代码的OpenGL程序示例?

我想知道是否有人知道任何与OpenGL集成的网络代码示例.

基本上,我需要通过网络将某些东西的位置坐标发送到我的OpenGL显示器......然后将对象绘制到正确的位置.

我遇到的问题是将我的UDP代码与游戏集成.我基本上有一个不断更新/绘制的循环.我原本以为我可以在单独的线程中使用UDP代码并只更新共享坐标.但是,如果我的绘制函数在网络代码写入新位置之前读取位置,那么我有一个竞争条件和无效数据...但是我不能使Update或Draw循环块...

我不确定我是否应该在这里使用同步或异步网络代码.

那么,关于如何解决这个问题的任何提示?谢谢

opengl networking multithreading boost network-programming

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

为被销毁的东西分配C++ out引用?

所以我正在查看一些代码,我看到了这个:

class whatever 
{
public:
    void SomeFunc(SomeClass& outVal)
    {
        outVal = m_q.front();
        m_q.pop();
    }

private:
    std::queue<SomeClass> m_q;
};
Run Code Online (Sandbox Code Playgroud)

这似乎不再是outVal将是一个有效的参考...但是,它似乎工作.

我之前也在其他代码中看过这个,这个有效吗?谢谢

c++ stl pass-by-reference

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

Boost Asio async_read不会停止阅读?

所以,

我一直在玩Boost asio函数和套接字(特别是异步读/写).现在,我认为boost::asio::async_read只有当新的缓冲区从网络连接进入时才调用处理程序...但是它不会停止读取相同的缓冲区,因此不断调用处理程序.我已经能够通过检查传输的字节数来缓解它,但它基本上处于一个浪费CPU循环的忙等待循环中.

这是我有的:

class tcp_connection : : public boost::enable_shared_from_this<tcp_connection> 
{
public:
    // other functions here

    void start()
    {
    boost::asio::async_read(socket_, boost::asio::buffer(buf, TERRAINPACKETSIZE),
        boost::bind(&tcp_connection::handle_read, shared_from_this(),
          boost::asio::placeholders::error,
          boost::asio::placeholders::bytes_transferred));
    }

private:
    const unsigned int TERRAINPACKETSIZE = 128;
    char buf[TERRAINPACKETSIZE];


    void handle_read(const boost::system::error_code& error, size_t bytesT)
    {
        if (bytesT > 0)
        { 
             // Do the packet handling stuff here
        }

        boost::asio::async_read(socket_, boost::asio::buffer(buf, TERRAINPACKETSIZE),
        boost::bind(&tcp_connection::handle_read, shared_from_this(),
          boost::asio::placeholders::error,
          boost::asio::placeholders::bytes_transferred));
    }
};
Run Code Online (Sandbox Code Playgroud)

有些东西被删除,但基本上会创建一个新的连接然后start()被调用.有什么我缺少的东西,以便该handle_read方法不会被连续调用?

c++ boost asynchronous boost-asio

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

c ++中的抽象类

假设我上课了:

class Bad_Date
{
private:
const char* _my_msg;
public:
const char* msg() const
{
return _my_msg;
}
};
Run Code Online (Sandbox Code Playgroud)

我想不能创建这个类的任何对象,但我真的不想在那里放任何其他东西,并使其成为纯虚拟fnc.有没有其他方法可以使这个类抽象或我必须创建虚拟fnc并将其声明为纯虚拟?谢谢.

c++ polymorphism abstract-class

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

我可以写这个JQuery语句更清洁吗?

所以我有以下内容:

var box = $(".MyCheckBox");

if (box[0].checked)
{
    // Do something
}
else
{
    // Do something else
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法使用过滤器或其他东西?

我知道我可以去:

$(".MyCheckBox")
    .filter(function(index) {
         return this.checked;
     })
    .each(function() {
         // do something
     });
Run Code Online (Sandbox Code Playgroud)

但是我需要在else语句中做一些事情......更简单的方法吗?谢谢!

javascript jquery

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

Glassfish和Spring设置教程/示例?

一个简单的网页搜索并没有真正发现任何例子......所以我想知道是否有人能指出我在Glassfish上配置Spring的任何信息?我发现的一切都已经过时了.

谢谢!

java spring glassfish

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

在Spring MVC中存储请求特定值的位置?

我正在使用Spring MVC,我想在某个地方存储特定于请求的值,以便可以在我的请求上下文中获取它们.假设我想在我的Controller(或某种处理程序)的上下文中设置一个值,然后从Spring请求/响应周期的其他部分获取该值(可以是视图,视图解析器,拦截器,异常处理程序,等)...我该怎么做?

我的问题是:

Spring MVC是否已经提供了一种方法来完成我上面描述的操作?
如果Spring没有这个功能,那么最好的方法是做任何想法(通过扩展一些东西)?

谢谢!

java spring spring-mvc

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

我可以将这个.NET foreach循环编写得更短吗?

我认为有一种更短的方式来编写这个foreach循环,创建一个深层的副本SortedDictionary<string, object>.请注意,这object只是一个占位符,我真的在那里使用其他一些引用类型.谢谢!

这是代码:

foreach (KeyValuePair<string, object> entry in sortedDictionary)
{
    this.mSortedDictionary.Add(entry.Key, new object());
}
Run Code Online (Sandbox Code Playgroud)

.net c#

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