小编air*_*ris的帖子

具有递归继承和使用声明的可变参数模板

我想做一些类似于下面的代码的事情,只是我不想实现func()两次,因为它会是相同的实现。你有什么建议如何实现这一点吗?

template <typename First, typename... Rest>
class Base : public Base<Rest...> {
public:
    using Base<Rest...>::func;
    void func(First object) {
        // implementation
    }
};

template <typename First>
class Base<First> {
public:
    void func(First object) {
        // implementation
    }
};

struct X {};
struct Y {};
struct Z {};

class Derived : public Base<X, Y, Z> {};

// ...

Derived d;
d.func(X{});
d.func(Y{});
d.func(Z{});
Run Code Online (Sandbox Code Playgroud)

c++ templates variadic-templates c++11

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

NixOS:使用不同渠道安装非免费软件包

我正在使用默认的 nixos 17.09 频道,并且想要unfree从不稳定频道安装软件包。

在这种情况下,我使用(import <nixos-unstable> {}).vscode 安装 vscode,但收到必须设置的错误...allowUnfree = true; 似乎该设置仅适用于默认通道。如何allowFree = true;在不稳定的频道上也进行设置?

nixos nix

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

SFINAE在void和non-void方法之间发送

我有以下内容:

template <typename T>
struct Base {
    auto func() {
        // do stuff
        auto x = static_cast<T&>(*this).func_impl();
        // do stuff
        return x;
    }
};

struct A : Base<A> {
    int func_impl() {
        return 0;
    }
};

struct B : Base<B> {
    void func_impl() {
    }
};

int main() {
    A a;
    int i = a.func();
    B b;
    b.func();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

问题是我无法func_impl在派生类中声明返回类型,void如图所示B.我尝试使用SFINAE解决问题,如下所示:

template <typename T>
struct Base {
    template <typename = enable_if_t<!is_void<decltype(declval<T>().func_impl())>::value>>
    auto func() …
Run Code Online (Sandbox Code Playgroud)

c++ templates sfinae c++14

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

标签 统计

c++ ×2

templates ×2

c++11 ×1

c++14 ×1

nix ×1

nixos ×1

sfinae ×1

variadic-templates ×1