我使用以下代码得到“非静态成员引用必须相对于特定对象”,
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
我需要实现几个模块,如下所示,
#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)
在哪里,
但是,成员变量 'data' 将被复制,因为 'ModeHybrid' 继承自 'ModeA' 和 'ModeB'。
有什么办法可以避免这种情况吗?
我正在设计一个接口,它接受一个用户定义的函数作为参数,然后在一个内置函数中执行,如下所示。
#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)
在哪里,
我想知道的是“内置”函数中的“如何实现 if-else 语句”?