小编LI.*_*.LE的帖子

成员变量作为默认参数?

我使用以下代码得到“非静态成员引用必须相对于特定对象”,

class A{
    int data;
    int _default = 0;
public:
    A(int data, int _default) : data(data), _default(_default) {}
    void set(int data = _default){ this->data = data; }
};

int main(){
    A a1(1, 1); a1.set(10); a1.set();
    A a2(2, 2); a2.set(20);
}
Run Code Online (Sandbox Code Playgroud)

我想做的事?

  • 当我们调用时A.set()A::data设置为A::_default
  • 当我们调用时A.set(a)A::data设置为a

c++ arguments default-arguments

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

在 C++ 中继承两兄弟的最佳风格是什么?

我需要实现几个模块,如下所示,

#include <stdio.h>
class Base{
protected:
    int data;
};
class ModeA : public Base{};
class ModeB : public Base{};
class ModeHybrid: public ModeA, public ModeB{
public:
    void func(){printf("%d\n", this->data);}
};

int main(){
    ModeHybrid mh;
    mh.func();
}
Run Code Online (Sandbox Code Playgroud)

在哪里,

  • 有一个类“基础”
  • 两个模块“ModeA”和“ModeB”继承自“Base”
  • 混合模块“ModeHybrid”继承自“ModeA”和“ModeB”

但是,成员变量 'data' 将被复制,因为 'ModeHybrid' 继承自 'ModeA' 和 'ModeB'。

有什么办法可以避免这种情况吗?

c++ inheritance multiple-inheritance

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

如何检测C++中函数的参数列表?

我正在设计一个接口,它接受一个用户定义的函数作为参数,然后在一个内置函数中执行,如下所示。

#include <stdio.h>
#include <vector>
using namespace std;

template <class USERDEF>
void builtin(USERDEF userdef){
    std::vector<int> vec = {1, 2, 3};
    if("parameter list is (vector<int>&)") 
        userdef(vec);
    else if("parameter list is (vector<int>::iterator, vector<int>::iterator)") 
        userdef(vec.begin(), vec.end());
    else 
        exit(-1);
}

void userdef1(vector<int> &vec){
    for(auto it=vec.begin(); it!=vec.end(); it++)
        printf("%d ", *it);
    printf("\n");
}

void userdef2(vector<int>::iterator begin, vector<int>::iterator end){
    for(auto it=begin; it!=end; it++)
        printf("%d ", *it);
    printf("\n");
}

int main(){
    builtin(userdef1);
    builtin(userdef2);
}
Run Code Online (Sandbox Code Playgroud)

在哪里,

  • 函数“builtin”接受用户定义的函数,并通过检测给定函数“userdef”的参数列表来传递参数。
  • 另外两个函数 'userdef1' 和 'userdef2' 用不同的参数列表做同样的事情。

我想知道的是“内置”函数中的“如何实现 if-else 语句”?

c++ parameters arguments parameter-passing

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