gpt4 book ai didi

c++ - 是否可以在 C++ 中强制传递依赖对象的常量

转载 作者:太空狗 更新时间:2023-10-29 20:01:57 24 4
gpt4 key购买 nike

这是我想阻止的:

class Dep; //for "dependency"

class C {
private:
const Dep& dep_; //or std::shared_ptr if I want to guarantee proper lifetime of dependency
public:
C(const Dep& dep) : dep_(dep){}
}

Dep d(Arg arg);
C obj(d); //obj can't change d
d.some_non_const_method(); //But it's creator can :(

我想得到的是,创建 C 对象的唯一正确方法是这样的:

Dep d(Arg arg);
d.some_non_const_method();
const Dep d1(d); //or move constructor if appropriate
C obj(d1); //Object d1 must be const!
d1.some_non_const_method(); //compile error, so obj can be sure that the dependency he's got is really const.

有没有办法通过语法强制执行此操作?

附言依赖是为了共享,所以我不能在这里使用 std::unique_ptr

最佳答案

如果我正确理解你的问题,你只想接受一个 const 参数,并且如果传递了一个非 const 参数则希望得到一个错误。

最简单的方法应该是将非const 版本标记为delete:

class C {
private:
const Dep& dep_;
public:
C(const Dep& dep) : dep_(dep){}
C(Dep &) = delete;
};

然后:

Dep d;
C obj(d); // Error, deleted function selected

const Dep d1(d);
C obj(d1); // ok

关于c++ - 是否可以在 C++ 中强制传递依赖对象的常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49031718/

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