我正在专门处理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相同......
无论如何,还有其他任何方式去做吗?让我知道你们的想法......谢谢.
memcpy是否有相应的提升?谢谢!
编辑:对不起,我没有意识到memcpy是在标准库:)我以为这是一个操作系统调用:(
我想知道是否有人知道任何与OpenGL集成的网络代码示例.
基本上,我需要通过网络将某些东西的位置坐标发送到我的OpenGL显示器......然后将对象绘制到正确的位置.
我遇到的问题是将我的UDP代码与游戏集成.我基本上有一个不断更新/绘制的循环.我原本以为我可以在单独的线程中使用UDP代码并只更新共享坐标.但是,如果我的绘制函数在网络代码写入新位置之前读取位置,那么我有一个竞争条件和无效数据...但是我不能使Update或Draw循环块...
我不确定我是否应该在这里使用同步或异步网络代码.
那么,关于如何解决这个问题的任何提示?谢谢
所以我正在查看一些代码,我看到了这个:
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将是一个有效的参考...但是,它似乎工作.
我之前也在其他代码中看过这个,这个有效吗?谢谢
所以,
我一直在玩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方法不会被连续调用?
假设我上课了:
class Bad_Date
{
private:
const char* _my_msg;
public:
const char* msg() const
{
return _my_msg;
}
};
Run Code Online (Sandbox Code Playgroud)
我想不能创建这个类的任何对象,但我真的不想在那里放任何其他东西,并使其成为纯虚拟fnc.有没有其他方法可以使这个类抽象或我必须创建虚拟fnc并将其声明为纯虚拟?谢谢.
所以我有以下内容:
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语句中做一些事情......更简单的方法吗?谢谢!
一个简单的网页搜索并没有真正发现任何例子......所以我想知道是否有人能指出我在Glassfish上配置Spring的任何信息?我发现的一切都已经过时了.
谢谢!
我正在使用Spring MVC,我想在某个地方存储特定于请求的值,以便可以在我的请求上下文中获取它们.假设我想在我的Controller(或某种处理程序)的上下文中设置一个值,然后从Spring请求/响应周期的其他部分获取该值(可以是视图,视图解析器,拦截器,异常处理程序,等)...我该怎么做?
我的问题是:
Spring MVC是否已经提供了一种方法来完成我上面描述的操作?
如果Spring没有这个功能,那么最好的方法是做任何想法(通过扩展一些东西)?
谢谢!
我认为有一种更短的方式来编写这个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) c++ ×5
boost ×3
java ×2
spring ×2
.net ×1
asynchronous ×1
boost-asio ×1
c ×1
c# ×1
glassfish ×1
javascript ×1
jquery ×1
networking ×1
oop ×1
opengl ×1
polymorphism ×1
spring-mvc ×1
stl ×1