gpt4 book ai didi

c++ - 将成员声明与 enable_if 一起使用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:50:34 27 4
gpt4 key购买 nike

我需要有条件地使用成员声明。

template <bool> struct B;
template <> struct B<true> { void foo(); };
template <> struct B<false> { };

template <typename T>
struct A : public B<is_default_constructible<T>::value> {
using B<is_default_constructible<T>::value>::foo();

void foo(int) {}
};

这显然行不通,因为B<bool>::foo没有定义在一半的情况下。我怎样才能做到这一点?拥有B<>::foo()A<T> 中可见foo(int) 旁边的作用域?

感谢帮助

最佳答案

这是我的解决方案。我敢肯定它不会是最好的,但它可以完成工作。

struct A {
void foo(int) {}
};

struct A应该包含您想要在两种情况下定义的方法。

template <bool> struct B;
template <> struct B<false> : A {};
template <> struct B<true> : A {
using A::foo;
void foo() {}

};

如果是B<false> , 只有 void foo(int)被定义为。如果是B<true> , 两者 void foo(int)void foo()被定义。

template <typename T>
struct C : public B<is_default_constructible<T>::value> {};

现在我不必担心 B<is_default_constructible<T>::value>::foo()在某些情况下未定义。

class D { D() = delete; };

int main()
{
C<int> c1;
c1.foo(1234);
c1.foo();
// both methods are defined for C<int>

C<D> c2;
c2.foo(1234);
// c2.foo(); // undefined method

return 0;
}

关于c++ - 将成员声明与 enable_if 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34154830/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com