我想做一些类似于下面的代码的事情,只是我不想实现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) 我正在使用默认的 nixos 17.09 频道,并且想要unfree从不稳定频道安装软件包。
在这种情况下,我使用(import <nixos-unstable> {}).vscode 安装 vscode,但收到必须设置的错误...allowUnfree = true;
似乎该设置仅适用于默认通道。如何allowFree = true;在不稳定的频道上也进行设置?
我有以下内容:
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)