小编Und*_*nda的帖子

为什么lambda auto&parameter选择const重载?

我正在尝试实现一个包含任意类型和互斥锁的类.要访问包装数据,需要传递一个仿函数作为locked方法的参数.然后包装类将包装的数据作为参数传递给仿函数.

我希望我的包装类使用const和非const,所以我尝试了以下内容

#include <mutex>
#include <string>

template<typename T, typename Mutex = std::mutex>
class   Mutexed
{
private:
    T m_data;
    mutable Mutex m_mutex;

public:
    using type = T;
    using mutex_type = Mutex;

public:
    explicit Mutexed() = default;

    template<typename... Args>
    explicit Mutexed(Args&&... args)
        : m_data{std::forward<Args>(args)...}
    {}

    template<typename F>
    auto locked(F&& f) -> decltype(std::forward<F>(f)(m_data)) {
        std::lock_guard<Mutex> lock(m_mutex);
        return std::forward<F>(f)(m_data);
    }

    template<typename F>
    auto locked(F&& f) const -> decltype(std::forward<F>(f)(m_data)) {
        std::lock_guard<Mutex> lock(m_mutex);
        return std::forward<F>(f)(m_data);
    }
};

int main()
{
    Mutexed<std::string> str{"Foo"};

    str.locked([](auto &s) …
Run Code Online (Sandbox Code Playgroud)

c++ templates generic-lambda c++14

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

Java EE 7基于表单的身份验证

我目前正在开发基于Java EE 7,PostgreSQL和应用程序服务器GlassFish 4的Web应用程序.我需要实现基于表单的身份验证,并确保一些URL知道:

  • 用户和角色/组(无论它们被调用)都存储在数据库中.
  • 我希望我的应用程序尽可能"标准化"(即我目前正在使用JSF和JPA,而没有像spring,struts这样的其他框架......)

经过一番研究,我发现Java EE提供了一种称为JASPIC的标准认证机制.因此,我将研究重点放在JASPIC上,并阅读了多篇Stackoverflow Q/A和Arjan Tijms撰写的文章(如果没有他的回答或评论,几乎不可能找到与Java EE相关的Stackoverflow Q/A,多亏了他方式) :

我的问题是:JASPIC是否允许我做我需要的事情(表单身份验证+带角色的URL限制),是否值得努力使用它?我的意思是:使用其他机制可能更安全,更容易.

Arjan Tijms还说,无论是否使用JASPIC都是"鸡蛋和鸡蛋问题",如果使用JASPIC是安全的(它不会产生比它解决的更多问题),无论我需要多少代码写,我真的想成为"第一批鸡之一".

java authentication standards java-ee jaspic

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

使用 Boost 作为 CMake 的 git 子模块

我想在我的 C++ 项目中使用 Boost 库(更准确地说,我对 Boost Graph Library 感兴趣)。我希望它作为 git 子模块位于我的 git 存储库中,就像它对所有其他依赖项所做的那样。

例如,如果我想启动一个具有fmt依赖项的项目作为 git 子模块,我会这样做:

mkdir my_project
cd my_project
git init .
Run Code Online (Sandbox Code Playgroud)

然后,我想fmt在标签上添加为子模块8.0.0

mkdir deps
git submodule add https://github.com/fmtlib/fmt.git deps/fmt
cd deps/fmt
git checkout 8.0.0
Run Code Online (Sandbox Code Playgroud)

然后,我返回到项目的根文件夹:

cd ../..
Run Code Online (Sandbox Code Playgroud)

我创建以下文件:

  • main.cpp
#include <fmt/format.h>

int main() {
    fmt::print("Hello, World!\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)
  • CMakeLists.txt
cmake_minimum_required(VERSION 3.17)
project(test_boost)

add_subdirectory(deps/fmt)

add_executable(test_boost main.cpp)
target_link_libraries(test_boost fmt::fmt)
Run Code Online (Sandbox Code Playgroud)

然后,我们可以构建:

mkdir build
cd build
cmake ..
make
Run Code Online (Sandbox Code Playgroud)

二进制文件工作正常,可以打印Hello, World!,这很棒。

现在如果我想添加增强版本1.77.0 …

c++ git boost cmake git-submodules

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

使用JPA Criteria API的“ NOT IN`subquery`”语句

我在Java EE应用程序中使用JPA和Criteria API来查询数据库(PostgreSQL)。我实现了一个树作为闭包表和我试图获取根节点。这是我的架构(省略了无用的字段):

NeedsTreev2     :
id              | primary key

NeedNode        :
id              | primary key
needstree_id    | foreign key references needstreev2(id)

NeedLink        :
ancestor_id     | foreign key references neednode(id)
descendant_id   | foreign key references neednode(id)
needstree_id    | foreign key references needstreev2(id)
Run Code Online (Sandbox Code Playgroud)

这是我的JPA映射

public class NeedsTreev2 {
    @Id
    private Long id;
}

public class NeedNode {
    @Id
    private Long id;
}

public class NeedLink {
    @ManyToOne
    private NeedNode ancestor;
    @ManyToOne
    private NeedNode descendant;
    @ManyToOne
    private NeedsTreev2;
}
Run Code Online (Sandbox Code Playgroud)

树的根节点是从不用作后代的根节点,因此这是返回指定树的根节点的SQL查询:

SELECT nNode.* FROM …
Run Code Online (Sandbox Code Playgroud)

java jpa eclipselink java-ee criteria-api

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

control-d是stdin的默认停止符号?在linux C?

control-d是stdin的默认停止符号?

在我们的作业中,它说command-d将停止输入.

这是默认的吗?

c linux terminal

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