我正在研究由其他人构建的C++程序,并且看到了很多DEBUG的用法
#ifdef DEBUG
cout << "Value is "<< value << endl;
#endif
Run Code Online (Sandbox Code Playgroud)
我自己仍然在学习过程中成为一名富有的C++程序员,我主要使用Visual Studio和断点进行调试.所以我想知道,如果我能够逐步调试代码来调试值,还有其他原因可以使用这些宏吗?
尝试谷歌但没有找到太多有用的页面.
谢谢.
我这里有一个小但有趣的任务.我有一个具有相同扩展名的文件列表,例如.
a.abc
b.abc
c.abc
Run Code Online (Sandbox Code Playgroud)
我想在这里是先创建文件夹叫a,b,c...每一个.abc文件,然后将每一个到它的文件夹中.
我能够使用cmd线直接完成第一步find ... | sed ... | xargs mkdir...,但是当我尝试使用类似的cmd将每个文件移动到自己的文件夹中时,我找不到答案.
我不熟悉这里的cmd,而且我有一个非常模糊的内存,在findcmd中我可以使用某种后向引用来重用文件/目录名,我记得它错了吗?搜索了一下但找不到好的参考.
谁能帮助我在这里完成cmd?
谢谢.
根据这个答案,人们RedisTemplate不能支持多个值序列化器.所以我想为不同的需求创建多个RedisTemplate,特别是一个用于字符串操作,一个用于JSON序列化的对象,用于RedisCacheManager.我正在使用Spring Boot并且当前RedisTemplate是自动装配的,我想知道声明第二个RedisTemplate实例共享同一个Jedis连接工厂但有自己的序列化器的正确方法是什么?
在两个不同的组件中尝试过类似的东西,
组件1声明,
@Autowired
private RedisTemplate redisTemplate;
redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer(Instance.class));
Run Code Online (Sandbox Code Playgroud)
组件2声明,
@Autowired
private StringRedisTemplate stringRedisTemplate;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,两个模板实际上是相同的.追溯到Spring代码,发现组件1的模板已解析为自动配置stringRedisTemplate.
手动调用RedisTemplate的构造函数然后afterPropertiesSet()它将无法工作,因为它抱怨没有找到连接工厂.
我知道这个请求可能与在Spring应用程序中定义另一个bean没什么大不同,但不确定当前的Spring-Data-Redis集成对我来说是最好的方式.请帮忙,谢谢.
基于我的理解端口映射是1比1,我不明白为什么用于容器数据中的端口映射的数据结构是这样的,
"NetworkSettings": {
[...]
"Ports": {
"8888/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "8888"
}
]
}
Run Code Online (Sandbox Code Playgroud)
该"8888/tcp"键映射到一个列表,而不是单个对象.因此在Java客户端中,Ports的数据结构是这样的Map<String, List<PortBinding>>,但是List这里只能包含1个元素吗?还是我非常想念一些基本的东西?
需要帮助治疗间歇性头痛.代码调用com.google.api.client.http.HttpRequest#executeAsync()基本上具有以下逻辑,
@Beta
public Future<HttpResponse> executeAsync(Executor executor) {
FutureTask<HttpResponse> future = new FutureTask<HttpResponse>(new Callable<HttpResponse>() {
public HttpResponse call() throws Exception {
return execute();
}
});
executor.execute(future);
return future;
}
@Beta
public Future<HttpResponse> executeAsync() {
return executeAsync(Executors.newSingleThreadExecutor());
}
Run Code Online (Sandbox Code Playgroud)
该调用java.util.concurrent.RejectedExecutionException有时会进入,并且从日志看来,当这种情况发生时,它总是伴随着垃圾收集.下面是发生这种情况时的日志模式示例,
2017-09-26 11:04:56.039186 2017-09-26T11:04:56.012+0000: [GC pause (G1 Evacuation Pause) (young) 213M->50M(300M), 0.0262262 secs]
2017-09-26 11:04:56.048210 java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.FutureTask@71a0a39 rejected from java.util.concurrent.ThreadPoolExecutor@36c306aa[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0]
2017-09-26 11:04:56.048212 at …Run Code Online (Sandbox Code Playgroud) java multithreading garbage-collection jvm google-http-client
关于字符串和char*basic,我有一个愚蠢的问题.
我正在使用一个返回char*值的函数,
const char *getValue(const char *key)
{
//if key found, and valueString is a string
return valueString.c_str();
//else
return NULL;
}
Run Code Online (Sandbox Code Playgroud)
然后我初始化一个字符串来保存返回值,
std::string value = getValue(key);
Run Code Online (Sandbox Code Playgroud)
问题是,每当找不到值时,这意味着函数返回NULL,我的赋值行将遇到异常.但是当有合法的回报价值时,一切都运转良好.
我想知道1.这种用法完全错了吗?意味着我永远不应该将char*与字符串混合?2.如果没有,那么当有一个合法的指针返回时,我的字符串会自动复制并存储吗?3.最好的方法是什么?
谢谢.
我的同事刚刚让我帮忙解决问题,他的代码中有几行代码
for (long counter = 0; counter < End; )
{
...
assert(counter++ < MAX);
...
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我们使用Visual Studio逐行调试时,似乎assert()行一直被跳过,并且counter永远不会增加,因此循环永远不会完成.
当我们使用VS查看反汇编时,此assert()函数没有装配线.我之前从未使用过assert(),所以我想知道这是正常的,他不应该将任何代码行为放入assert()或者调试器或其他方面有什么问题?
谢谢.
在C++中,单例中的所有成员都可以是静态的,还是尽可能的?我的想法是,无论如何全球只有一个例子.
在搜索时我确实在C#中找到了很多关于静态类的讨论,但对此并不熟悉.想了解它.
无论你有什么想法,请评论.
我正在尝试使用Redis为我的实体存储一些缓存数据,该实体内部具有不同类型的字段,例如,
public class Job {
private String id;
private Date createTime; //Long
private String submitterName;
private JobDefinition jobDef; //Another class
}
Run Code Online (Sandbox Code Playgroud)
有更多的字段,并且由于几个字段的更新频率高于其他字段,因此我决定将其保存job为Redis中的Hashmap,并将每个字段作为键。在这里,像这样的嵌套对象jobDef并不重要,因此我将其用作Jackson2JsonRedisSerializer原样hashValueSerializer,RedisTemplate而jobDefobj将仅被序列化为一个长JSON字符串,在我的情况下完全可以。
但是我不知道如何有效地job从Redis 反序列化整个对象。我设置为反序列化器的类型就像,Jackson2JsonRedisSerializer(Map.class)但是在反序列化String键和值时会抱怨。
那么,这是无效的用法RedisTemplate吗?还是应该为它配置串行器?
编辑:添加更多的代码详细信息,
@Autowired
private StringRedisTemplate redisTemplate; //Here I'm using a String template as I need to use the same redisTemplate for some key-value/list operations too
Map jobHash= new ObjectMapper().convertValue(job, Map.class);
redisTemplate.setHashValueSerializer(new Jackson2JsonRedisSerializer(Map.class));
redisTemplate.opsForHash().putAll("job:"+job.getId(), jobHash); //After this the job …Run Code Online (Sandbox Code Playgroud) 我正在构建一个 Docker 映像来运行基于 Spring Boot 的应用程序。我希望用户能够通过将包含 application.properties 的文件夹安装到容器中来提供运行时属性文件。这是我的 Dockerfile,
FROM java:8
RUN mkdir /app
RUN mkdir /app/config
ADD myapp.jar /app/
ENTRYPOINT ["java","-jar","/app/myapp.jar"]
Run Code Online (Sandbox Code Playgroud)
当启动容器时,我运行这个,
docker run -d -v /home/user/config:/app/config myapp:latest
Run Code Online (Sandbox Code Playgroud)
其中/home/user/config包含application.properties我希望在运行时获取 jar 文件。
然而这不起作用,应用程序运行不会获取此安装的属性文件,它使用 jar 内打包的默认属性文件。但是,当我exec进入已启动的容器并再次手动运行入口点 cmd 时,它会通过拾取我挂载的文件按预期工作。所以我想知道这是否与挂载如何与入口点一起工作有关?或者我只是没有为这种情况正确编写 Dockerfile?
我想从向量中删除一些迭代器,所以这就是我现在所拥有的.
void function(std::vector <class*> & vector)
{
std::vector <class*>::iterator it;
for(it = vector.begin(); iter != vector.end(); ++iter)
{
if(it->value == 1)
vector.erase(it);
}
Display(vector);
return;
}
Run Code Online (Sandbox Code Playgroud)
显然,当迭代器被移除时,这个代码给了我一个错误,它是向量中的最后一个,否则看起来它工作正常.我知道在这样的循环中修改向量可能不是理想的行为,但如果我必须这样做,那么最好的方法是什么?
谢谢.
我想使用boost :: call_once()来实现线程安全的lazy-construction单例场景,但是,基本单例类有许多派生类,因此getInstance()函数接受一个参数来确定要初始化的派生类.代码看起来像,
Singleton * Singleton::getInstance(Input * a) {
if (!instance) {
instance = buildme(a); //buildme() will return a derived class type based on input a.
}
return instance;
}
Run Code Online (Sandbox Code Playgroud)
我想使用boost::call_once(),但看起来它只能用于没有参数的函数void (*func)().如果有人知道替代解决方案,请帮忙.
谢谢.
编辑::
另一个问题,如何调用非静态成员函数使用call_once?我有init()这个类的非静态成员函数,但我找不到使用它调用它的正确语法boost::call_once().或者我应该制作init()静态使用的东西吗?
谢谢.
我是新手,现在确定这是否可行.我想为std::set<std::string>函数添加一个参数,并将其默认值设置为NULL,以避免对以前的使用产生影响.
基本上,
func(int a); turns into
func(int a, std::set<std::string> & temp = NULL);
Run Code Online (Sandbox Code Playgroud)
但这会给我一个错误 "error C2440: 'default argument' : cannot convert from 'int' to 'std::set<_Kty> &'"
有人可以帮我这个吗?
谢谢