如何创建指向可变成员的指针?
考虑以下代码:
struct Foo
{
mutable int m;
template<int Foo::* member>
void change_member() const {
this->*member = 12; // Error: you cannot assign to a variable that is const
}
void g() const {
change_member<&Foo::m>();
}
};
编译器生成一条错误消息。问题是成员 m
是可变的,因此允许更改 m
。但函数签名隐藏了可变声明。
如何声明指向可变成员的指针来编译此代码? 如果不可能,请链接到标准 C++。
Consider the following code:
struct Foo
{
mutable int m;
template<int Foo::* member>
void change_member() const {
this->*member = 12; // Error: you cannot assign to a variable that is const
}
void g() const {
change_member<&Foo::m>();
}
};
Compiler generates an error message. The thing is that the member m
is mutable therefore it is allowed to change m
. But the function signature hides mutable declaration.
How to decalre pointer-to-mutable-member to compile this code?
If it is impossible please link to Standard C++.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
根据 C++ 标准 5.5/5,此代码格式错误:
您可以使用包装类来解决此问题,如下所示:
但我认为您应该考虑重新设计您的代码。
This code is ill-formed according to C++ Standard 5.5/5:
You could use wrapper class to workaround this problem as follows:
But I think you should consider redesign your code.