我正在使用泛型来写东西,令我惊讶的是我发现这不起作用:
class foo<T>{
T innerT = new T();
}
Run Code Online (Sandbox Code Playgroud)
所以我不能实例化泛型类型?有没有办法做到这一点?
出于某种未知原因,如果我有:
class A{
int stars;
public int getStars(){
return stars;
}
public void setStarts(int stars){
this.stars = stars;
}
}
class B extends A{
int sunshines;
[getter and setter for sunshines]
}
class C{
List<A> classes;
[get and set for classes]
}
Run Code Online (Sandbox Code Playgroud)
如果我序列化类型CI的对象在字段类中的序列化对象中只有A的字段(如果对象是B,我希望有B的字段).
怎么做?
我有这个标题(从增强asio示例重做):
#ifndef MSGSRV_H_
#define MSGSRV_H_
#include <asio.hpp>
#include <boost/array.hpp>
#include <boost/bind.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/system/error_code.hpp>
namespace msgSrv {
class msgSrv {
private:
asio::ip::udp::socket *asioSocket;
asio::io_service *asioIoService;
int listenPort;
boost::array<char,1> rcvBuff;
asio::ip::udp::endpoint lastRcvdPcktEndp;
public:
msgSrv(int listenPort);
virtual ~msgSrv();
void start();
void pckRcvd( boost::system::error_code &, std::size_t);
};
}
Run Code Online (Sandbox Code Playgroud)
和.cpp:
#include "msgSrv.h"
namespace msgSrv {
msgSrv::msgSrv(int listenPort) {
// TODO Auto-generated constructor stub
this->listenPort = listenPort;
try{
asioIoService = new asio::io_service();
asioSocket = new asio::ip::udp::socket(*asioIoService, asio::ip::udp::endpoint(asio::ip::udp::v4(), listenPort)); //new asio::ip::udp::socket_(*asioIoService, udp::endpoint(udp::v4(), listenPort));
}catch(std::exception &e){ …Run Code Online (Sandbox Code Playgroud) 我注意到如果我在Windows资源管理器中有一个.js文件(不是Internet Explorer,我的意思是文件夹资源管理器......)我实际上可以点击它然后执行,给出错误消息,比如说"window object is未定义".是否有关于运行.js脚本的环境和可用对象的更多信息?
在Java和C#工作了几年之后,我现在又回到了C++.当然,我的编程风格受这些语言的影响,我倾向于感觉需要大量使用的特殊组件:HASH MAP.在STL中有hash_map,GCC说它已被弃用,我应该使用unordered_map.所以我转向它.我承认我不确定我正在做什么的可移植性,因为我必须使用编译器开关打开即将推出的标准的-std = c ++ 0x功能.无论如何,我对此很满意.如果我上课,我就无法工作
std::unordered_map<unsigned int, baseController*> actionControllers;
Run Code Online (Sandbox Code Playgroud)
并在一个方法中:
void baseController::attachActionController(unsigned int *actionArr, int len,
baseController *controller) {
for (int i = 0; i < len; i++){
actionControllers.insert(actionArr[i], controller);
}
}
Run Code Online (Sandbox Code Playgroud)
它出现了通常的象形文字说它无法找到插入...提示?
当我运行我的程序时,一切都很顺利.最后打印出来:
*** glibc detected *** ./streamShare: double free or corruption (fasttop): 0x08292130 ***
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6[0xcc2ff1]
/lib/tls/i686/cmov/libc.so.6[0xcc46f2]
/lib/tls/i686/cmov/libc.so.6(cfree+0x6d)[0xcc779d]
/usr/lib/libstdc++.so.6(_ZdlPv+0x21)[0x1c86f1]
./streamShare[0x804be7f]
./streamShare[0x804be3e]
./streamShare[0x804abc0]
./streamShare[0x804a5f2]
./streamShare[0x804a1c4]
./streamShare[0x804a1d7]
./streamShare[0x804a46a]
./streamShare[0x804ba45]
./streamShare[0x804b49c]
./streamShare[0x804ac68]
./streamShare[0x804ac48]
./streamShare[0x804a676]
./streamShare[0x804a237]
./streamShare[0x8049a3f]
./streamShare[0x804d2e5]
./streamShare[0x804d34d]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0xc6eb56]
./streamShare[0x8049361]
Run Code Online (Sandbox Code Playgroud)
我检查过,它发生在一个函数返回时,程序的所有对象都会自动进行实例化.无论如何,我没有为这些对象定义任何析构函数,我尝试使用STL容器和TR1 shared_ptr.我想一切都发生在默认的析构函数中.有没有办法知道它在哪里分手?我的意思是,我想知道哪个物体破坏会造成整个混乱.我正在使用这些容器和共享指针:
typedef std::tr1::shared_ptr<messageListener> mlsptr;
typedef std::map<const char*, mlsptr, ltstr> CONSTCHP2MSLST;
Run Code Online (Sandbox Code Playgroud)
messageListener没有析构函数.其中两个向量:
std::vector<MSG> queueto1;
Run Code Online (Sandbox Code Playgroud)
其中MSG析构函数是:
MSG::~MSG() {
destroy();
}
void MSG::destroy() {
if (payload != NULL)
delete[] payload;
payload = NULL;
payloadLen = 0;
}
Run Code Online (Sandbox Code Playgroud)
从来没有出现问题,我不应该......
任何推荐如何跟踪这个问题?我很笨...
编辑:
这里是VALGRIND输出:
valgrind ./streamShare -v …Run Code Online (Sandbox Code Playgroud) 我正在使用GSON进行项目.特别是我使用此代码生成JSON字符串:
Gson gs = new Gson();
JsonObject cmdobj = new JsonObject();
cmdobj.addProperty("cmd", cmd);
cmdobj.add("arg", args);
String cmdstr = cmdobj.toString();
Run Code Online (Sandbox Code Playgroud)
它产生的东西如下:
{"cmd":"HANDSHAKE","arg":{"protocol":"syncmanager","serverName":"12345678910"}}
Run Code Online (Sandbox Code Playgroud)
然后在客户端机器上读取json数据:
String cmdstr = readCommand(this.is);
Gson gs = new Gson();
JsonObject jsobj = gs.fromJson(cmdstr, JsonObject.class);
JsonElement cmd = jsobj.get("cmd");
JsonObject args = jsobj.get("arg").getAsJsonObject();
Run Code Online (Sandbox Code Playgroud)
问题是应该包含已解析对象的jsobj不包含任何内容(如果我执行toString()print {}).为什么这个?我只想要另一边的JSonObject树,而不是对象序列化.有线索吗?
我开始在项目中使用NanoHTTPD.事实上,它的简洁性非常好.不幸的是,事实证明我需要处理同时连接,例如我有一个很长的响应,同时服务器不会被阻止.
您有什么推荐的吗?我需要它简单,功能丰富的Nano.
我是Spring的新手,我只是阅读有关Hibernate-Spring集成(版本3)的文档.我不明白为什么自动事务管理(声明性管理)应用于文档中的"服务",而不是直接应用于DAO实现.特别是我不知道服务意味着什么,与DAO相比有什么不同,如果真的需要提供与Spring的Hibernate集成.
我试图做的只是使用Hibernate DAO实现并在XML中配置以在实例化时设置会话工厂.无论如何,抛出异常,因为Spring不允许非事务性的hibernate访问.所以为了添加事务访问,我是否必须添加"服务"的东西?这与简单的DAO有什么不同?