小编Der*_*rek的帖子

在C++中使用DEBUG宏的原因是什么?

我正在研究由其他人构建的C++程序,并且看到了很多DEBUG的用法

#ifdef DEBUG
    cout << "Value is "<< value << endl;
#endif
Run Code Online (Sandbox Code Playgroud)

我自己仍然在学习过程中成为一名富有的C++程序员,我主要使用Visual Studio和断点进行调试.所以我想知道,如果我能够逐步调试代码来调试值,还有其他原因可以使用这些宏吗?

尝试谷歌但没有找到太多有用的页面.

谢谢.

c++ debugging macros

9
推荐指数
2
解决办法
5166
查看次数

Linux:如何将每个文件移动到相应命名的文件夹中

我这里有一个小但有趣的任务.我有一个具有相同扩展名的文件列表,例如.

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?

谢谢.

linux shell

5
推荐指数
2
解决办法
6040
查看次数

如何在Spring Boot应用程序中创建第二个RedisTemplate实例

根据这个答案,人们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集成对我来说是最好的方式.请帮忙,谢谢.

spring-data-redis spring-boot

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

Docker可以将多个容器端口映射到一个主机端口吗?

基于我的理解端口映射是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个元素吗?还是我非常想念一些基本的东西?

docker docker-networking

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

垃圾收集似乎关闭本地执行程序并导致RejectedExecutionException

需要帮助治疗间歇性头痛.代码调用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

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

Std :: string由返回char*的函数赋值

更新:对于getValue函数我无法控制,所以我可以从我这边做什么?

关于字符串和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.最好的方法是什么?

谢谢.

c++

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

assert()函数未在反汇编中显示

我的同事刚刚让我帮忙解决问题,他的代码中有几行代码

for (long counter = 0; counter < End; )
{
  ...
  assert(counter++ < MAX);
  ...
}
Run Code Online (Sandbox Code Playgroud)

问题是,当我们使用Visual Studio逐行调试时,似乎assert()行一直被跳过,并且counter永远不会增加,因此循环永远不会完成.

当我们使用VS查看反汇编时,此assert()函数没有装配线.我之前从未使用过assert(),所以我想知道这是正常的,他不应该将任何代码行为放入assert()或者调试器或其他方面有什么问题?

谢谢.

c++ compiler-construction

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

单身中的一切都可以是静态的吗?

在C++中,单例中的所有成员都可以是静态的,还是尽可能的?我的想法是,无论如何全球只有一个例子.

在搜索时我确实在C#中找到了很多关于静态类的讨论,但对此并不熟悉.想了解它.

无论你有什么想法,请评论.

c++ singleton static

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

RedisTemplate哈希值序列化器,用于具有多种类型的嵌套对象

我正在尝试使用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原样hashValueSerializerRedisTemplatejobDefobj将仅被序列化为一个长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)

serialization json redis spring-data-redis

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

Docker 挂载发生在入口点执行之前或之后

我正在构建一个 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?

docker spring-boot

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

c ++在遍历所有迭代器的同时擦除std :: vector.end()

我想从向量中删除一些迭代器,所以这就是我现在所拥有的.

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)

显然,当迭代器被移除时,这个代码给了我一个错误,它是向量中的最后一个,否则看起来它工作正常.我知道在这样的循环中修改向量可能不是理想的行为,但如果我必须这样做,那么最好的方法是什么?

谢谢.

c++ standard-library

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

如何在带参数的函数上使用boost :: call_once()

我想使用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()静态使用的东西吗?

谢谢.

c++ multithreading boost

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

我可以使用std :: set <std :: string>作为函数的默认参数吗?

我是新手,现在确定这是否可行.我想为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> &'"

有人可以帮我这个吗?

谢谢

c++

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