小编Ziz*_*Tai的帖子

将递归转换为循环

我有一个未知类型T,可能是非copy-或move-assignable,一个基于现有函数T op(const T &foo, Other bar)计算和返回new T的函数,以及一个递归函数:

template<typename Iter, typename T>
T foldLeft(Iter first, Iter last, const T &z, std::function<T(T, Other)> op)
{
    if (first == last) {
        return z;
    }
    return foldLeft(std::next(first), last, op(z, *first), op);
}
Run Code Online (Sandbox Code Playgroud)

编译器不能总是优化尾调用,因为T可能有一个非平凡的析构函数.我试图用循环手动重写它,但无法弄清楚如何重新分配z.

c++ optimization recursion

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

代码覆盖率优化

目前我有一堆针对我的 C++ 项目的单元测试,但我还没有(还)测试代码覆盖率。我正在使用-O3优化标志编译测试以暴露潜在的细微错误,但似乎如果我想使用诸如 之类的工具收集覆盖率信息,则gcov必须禁用任何优化标志。我应该构建两次测试(一个有-O3,另一个没有)?这个问题一般是怎么处理的?

c++ unit-testing code-coverage

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

Scala:.to [Seq] vs .toSeq on collections

someCollection.to[Seq]和之间有什么区别someCollection.toSeq?我注意到的一件事是,当调用a时Map,.toSeq通常会返回a Vector,而.to[Seq]通常会返回a ArrayBuffer,但我不确定它的真正含义.

scala

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

将返回和参数类型从转换运算符提取到函数指针

是否可以编写一个模板来提取类可转换为的函数指针类型的返回类型和参数类型,只知道类本身?例:

struct Foo {
    using FnPtr = int (*)(char, double);

    operator FnPtr() const { ... }
};

// Can I extract the return type (int) and argument types (char and double),
// knowing only `Foo` as an opaque type?
Run Code Online (Sandbox Code Playgroud)

c++ templates c++11 c++14

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

shared_ptr 自定义分配器和自定义删除器

是否可以同时使用自定义分配器和自定义删除器std::shared_ptr?在我看来没有办法这样做,因为std::allocate_shared没有删除器。而且,删除器唯一合理的签名将是类似void deleter(T*, const Alloc&),而不仅仅是void deleter(T*)

有什么办法可以解决这个限制吗?

c++ c++11

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

C++20 中自动生成构造函数的新类型

下面的代码不能在 GCC 11 上编译-std=c++17,但可以-std=c++20

#include <iostream>
#include <string>

struct Foo {
    std::string s;
    int i;
};

int main()
{
    Foo foo("hello", 42);
    std::cout << foo.s << ' ' << foo.i << '\n';
}
Run Code Online (Sandbox Code Playgroud)

C++20 中的哪些功能可以实现此目的?编译器生成什么样的构造函数?

c++ c++20

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

使用外部 OpenID Connect 提供程序进行 ASP.NET Core 身份验证/授权

我正在学习 ASP.NET Core 中的身份验证/授权,并对在我的场景中应该使用哪些组件感到困惑:我有一个 SPA 前端和一个 ASP.NET Core API 后端。我正在使用仅支持授权代码流的第三方 OpenID Connect 提供商(如 Okta),因此我相信只有后端应该与该外部提供商通信。外部提供者仅处理身份验证,而不处理授权。我们的应用程序需要基于角色的访问控制。

  • 考虑到身份验证已由外部 OpenID Connect 提供商处理,我们是否需要 Identity Server?
  • 我们需要 ASP.NET Core Identity 吗?
  • 在这种情况下我们应该如何进行授权呢?

c# asp.net-web-api asp.net-identity asp.net-core identityserver4

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

Scala Play 2 Guice依赖注入特征

在我的应用程序中,我有以下特征/具体类:

在包中models.daos:

trait UserDAO // UserDAO.scala
class UserDAOImpl @Inject() (app: play.api.Appliction) extends UserDAO // UserDAOImpl.scala
Run Code Online (Sandbox Code Playgroud)

在包中controllers:

class Application @Inject() (userDao: UserDAO) extends Controller
Run Code Online (Sandbox Code Playgroud)

但是,当我运行应用程序时,我得到:

ProvisionException: Unable to provision, see the following errors:

1) No implementation for models.daos.UserDAO was bound.
  while locating models.daos.UserDAO
    for parameter 0 at controllers.Application.<init>(Application.scala:15)
  while locating controllers.Application
    for parameter 1 at router.Routes.<init>(Routes.scala:31)
  while locating router.Routes
  while locating play.api.inject.RoutesProvider
  while locating play.api.routing.Router
Run Code Online (Sandbox Code Playgroud)

我是依赖注入的新手,并不知道怎么告诉Guice使用具体的类.

dependency-injection scala guice playframework playframework-2.0

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

std :: unique是否会使向量迭代器失效?

对于此代码:

std::vector<int> v = {...};
std::sort(v.begin(), v.end());

// Does this work?
std::size_t unique_count = std::unique(v.begin(), v.end()) - v.cbegin();
Run Code Online (Sandbox Code Playgroud)

在最后一行中,我认为既然std::unique只是在向量内部移动东西并且不向其中插入任何内容,则不应使迭代器无效,因此我计算的方式unique_count应该是正确的.但我想确保是这样的.是吗?

c++ algorithm iterator

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

在类体中定义的内联好友函数

通常,当我们直接在类体中定义成员函数时,它是隐式的inline.但是这个怎么样:

class Foo {
public:
    friend void swap(Foo& a, Foo& b) { ... }

    ...
};
Run Code Online (Sandbox Code Playgroud)

swap含蓄inline或不?

c++

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

可以拥有或借用其内容的Rust通用类型

是否可以在Rust中表示可以拥有或借用其内容的通用结构?粗略的想法是:

struct Foo<T> {
    value: T,
}

fn make_foo<'a, T: From<&'a str>>(s: &'a str) -> Foo<T> {
    Foo<T>(s.into())
}
Run Code Online (Sandbox Code Playgroud)

但是,我不知道如何进行约束,T以便它既可以表示诸如a的自有值,也可以表示诸如a String的借入值&'a str

我必须创建两个单独的FooOwned<T>FooBorrowed<'a, T>吗?

rust

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

向量连接的 std::make_move_iterator 与 std::move

(这是关于std::move来自<algorithm>https : //en.cppreference.com/w/cpp/algorithm/move

AFAIK,有两种常见的方法可以将一个向量的内容移动到另一个向量的末尾。

第一的:

std::vector<T> dst, src;
...
dst.insert(dst.end(),
           std::make_move_iterator(src.begin()),
           std::make_move_iterator(src.end()));
Run Code Online (Sandbox Code Playgroud)

第二:

std::vector<T> dst, src;
...
std::move(src.begin(),
          src.end(),
          std::back_inserter(dst));
Run Code Online (Sandbox Code Playgroud)

这些都是进行连接的惯用方法吗?如果是这样,在语义方面有什么区别吗?

c++

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

检测最终课程的特征

是否可以确定是否在编译时T标记了类final?我一直试图修改这个答案的方法:

template<typename T>
struct sub {
    using type = struct : T {};
};

template<typename T>
struct is_final {
    using yes = char;
    using no = struct { char arr[2]; };

    template<typename U> static yes test(...);
    template<typename U> static no  test(typename sub<U>::type*);

public:
    static constexpr bool value = sizeof (test<T>(nullptr)) == sizeof (yes);
};
Run Code Online (Sandbox Code Playgroud)

但它不起作用; is_final<T>::value永远false.似乎SFINAE不会那样工作.

如果在C++ 11中无法实现这个特性,那么它是如何在C++ 14(std::is_final)中完成的?是否有一些新的语言功能可以实现这一点?

c++ templates sfinae c++11 c++14

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