我总是在Python中听到这个声明(对于诸如装饰器之类的主题,当你传递函数时等)但是从未真正看到过这方面的细节.
例如,是否可以创建一个c只有一个抽象方法的类,该方法使用一组打开和关闭的括号进行调用.
i.e class c:
@abstractmethod
def method_to_be_called_by():
...
Run Code Online (Sandbox Code Playgroud)
所以你可以拥有
c(whatever parameters are required)
Run Code Online (Sandbox Code Playgroud)
凭借我的理解,我可能会脱离标记,我只是对这个人的意思感到好奇.
我试图将一个枚举类包装在c ++头文件中,以便在cython项目中使用.我已经google了一下,无法找到如何实现这一点 - 是否支持?
我发现下面的行为真的很奇怪,这只是我代码中一个奇怪错误的原因。将带有引用的对象作为常量引用传递,然后使用这些引用来更改它们引用的对象是否被认为是不好的?我知道引用没有改变,但我会假设将对象作为 const ref 传递会使它的所有成员也成为 const 吗?
struct wrapr{
int& a;
};
void mod(const wrapr& aaa){
aaa.a = 1;
}
int main() {
int b = 2;
wrapr a {b};
mod(a);
std::cout << b; // prints 1
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编辑:
奇怪的是,如果我要声明结构
struct wrapr{
const int& a;
};
Run Code Online (Sandbox Code Playgroud)
那么代码将无法编译。我猜当你通过 const 引用传递一个对象时,我有什么心理模型,它与在它的所有成员变量上加上“const”前缀相同。显然情况并非如此。
所以目前我有:
std::string a;
std::unique_ptr<char[]> b(std::make_unique<char[]>(a.size() + 1));
std::copy(std::begin(a), std::end(a), b.get());
Run Code Online (Sandbox Code Playgroud)
是否可以一步直接初始化?
我今天刚刚开始学习c ++,并且很难找到一种优雅的方式来初始化地图.在mo,可怕的方法是:
typedef std::map < char, map < char, int > > terribly_initialised_map;
Run Code Online (Sandbox Code Playgroud)
然后
terribly_initialised_map plz_help;
plz_help['m']['e'] = 1;
....
...
..
.
Run Code Online (Sandbox Code Playgroud)
肯定有更好的办法?