【发布时间】:2021-08-11 06:23:37
【问题描述】:
我有一个模板:
template<typename T>
struct Parameter {
T value;
std::string name;
Parameter(std::string name, T value) : name(name), value(value){}
void fix() {
// Fix this->value (make this->value const)
}
void print() { std::cout << value << std::endl; }
};
我想在初始化后的某个时候对值变量进行“const-ify”
std::string name = "variance";
double var = 1.0;
Parameter<double> variance(name, var);
variance.print();
variance.fix();
variance.value = 2.3; // Not Allowed, throws error
是否可以这样做以及如何做到这一点?
【问题讨论】:
-
可能不是你想要的,但你可以创建一个对象,用
fix()包装类型。删除所有默认赋值/移动运算符并重新定义它们以在修复值后引发错误。同样为此,您需要一个类,否则您可以直接更改值 -
解决这个问题的方法是将变量设为私有,然后使用访问器方法获取和设置。 set 函数只允许你设置一次值,强制你不能再次设置值。