Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ constexpr变量的继承和设置_C++_Inheritance_C++17_Constexpr - Fatal编程技术网

C++ constexpr变量的继承和设置

C++ constexpr变量的继承和设置,c++,inheritance,c++17,constexpr,C++,Inheritance,C++17,Constexpr,我正在尝试实现以下行为: 我有两个类,继承自同一个类。它们都将执行一些工作,在某个点上更改它们的状态,在某个点上,需要检查此状态。对于这两个类,检查是相似的,因为在这两个测试中,我们将实际状态与所需状态进行比较。唯一不同的是所需的状态,它依赖于类 在代码中,我如何实现这一点的一个简单示例如下: #include <iostream> class A { public: static int x = 1; int y; A(int _y): y(_y) {}

我正在尝试实现以下行为:

我有两个类,继承自同一个类。它们都将执行一些工作,在某个点上更改它们的状态,在某个点上,需要检查此状态。对于这两个类,检查是相似的,因为在这两个测试中,我们将实际状态与所需状态进行比较。唯一不同的是所需的状态,它依赖于类

在代码中,我如何实现这一点的一个简单示例如下:

#include <iostream>

class A {
public:
    static int x = 1;
    int y;
    A(int _y): y(_y) {}

    void test() {
        bool passed = x == y;
        std::cout << "Test" << (passed ? "" : " not") << " passed\n";
    }
};

class B : public A {
public:
    B(int _y): A(_y)
    {
        x = 2; 
    }
};

class C : public A {
public:
    C(int _y) : A(_y)
    {
        x = 3;
    }
};

int main()
{
    B b(2);
    b.test(); // Test passed

    C c(2);
    c.test(); // Test not passed
    return 0;
}
#包括
甲级{
公众:
静态int x=1;
int-y;
A(int y):y(y){
无效测试(){
bool passed=x==y;

std::cout模板似乎很有帮助,特别是当继承似乎只是在这里分解代码时:

template <int x>
class A {
public:
    int y;
    A(int _y): y(_y) {}

    void test() {
        bool passed = x == y;
        std::cout << "Test" << (passed ? "" : " not") << " passed\n";
    }
};

// using B = A<2>; // Seems even enough in your example
class B : public A<2> {
public:
    using A<2>::A;
};

class C : public A<3> {
public:
    using A<3>::A;
};
模板
甲级{
公众:
int-y;
A(int y):y(y){
无效测试(){
bool passed=x==y;

std::cout模板似乎很有帮助,特别是当继承似乎只是在这里分解代码时:

template <int x>
class A {
public:
    int y;
    A(int _y): y(_y) {}

    void test() {
        bool passed = x == y;
        std::cout << "Test" << (passed ? "" : " not") << " passed\n";
    }
};

// using B = A<2>; // Seems even enough in your example
class B : public A<2> {
public:
    using A<2>::A;
};

class C : public A<3> {
public:
    using A<3>::A;
};
模板
甲级{
公众:
int-y;
A(int y):y(y){
无效测试(){
bool passed=x==y;

std::谢谢!就一个问题,你说的“继承似乎只是在这里分解代码”是什么意思?@5xum:
A
没有虚拟方法,所以你不能多态地使用B,C。类
B
C
相关吗(因为它们都是从
A
继承的)它们现在不再从同一类继承,因此
void test(A&);bb(42);cc(42);test(B);test(C);
std::vector v{&B,&C}
不再是原来的样子了。好吧,A没有虚拟方法,因为我想写一个最小的工作示例。我的实际用例更复杂,并且确实包含虚拟方法。因此您可能需要调整我的解决方案(比如为
A
提供基类)。谢谢!只需一个问题,您的意思是什么“继承似乎只是在这里分解代码”@5xum:
A
没有虚拟方法,所以不能多态地使用B,C。类
B
C
相关吗(因为它们都是从
A
继承的)?它们现在不再从同一个类继承,所以
无效测试(A&);B(42);C(42);测试(B);测试(C)
std::vector v{&b,&c}
已不再可能保持原样。好吧,A没有虚拟方法,因为我想编写一个最小的工作示例。我的实际用例更复杂,并且确实包含虚拟方法。因此,您可能需要调整我的解决方案(例如为
A
设置基类)。