我担心这是一个愚蠢的问题但是...
有人可以建议我一种方法来强制函数(或方法)的返回值,返回对内部静态变量或类/结构成员的引用,仅分配给引用 变量 ?
我试着用一个最小的例子来解释我想要什么。
给定以下代码,函数 wrapValue()
返回对内部静态变量的引用,
int & wrapValue (int v0)
{
static int val;
return val = v0;
}
int main ()
{
// how to permit this ...
int & v0 { wrapValue(0) };
// ... but forbid this ...
int v1 { wrapValue(1) };
int v2;
// ... and this ?
v2 = wrapValue(2);
}
有一种方法允许初始化v0
(并将v0
绑定(bind)到静态变量)并禁止初始化v1
和v2
的赋值(不将 v1
和 v2
绑定(bind)到静态变量)?
如果当前的 C++ 标准不可能,正如我担心的那样,有人可以向我建议另一种方法(但不是太复杂:我打算在我想保持简单的库中使用它)来禁止无限赋值?
最佳答案
这个解决方案有点棘手,但它(我认为)如您所愿:
#include <iostream>
struct int_wrapper {
int value;
int_wrapper &operator=(int value) {
this->value = value;
return *this;
}
operator int&() {
return value;
}
operator int() {
return value;
}
};
int_wrapper& wrapValue (int v0) {
static int_wrapper val;
return val = v0;
}
int main () {
// how to permit this ...
int & v0 = wrapValue(0);
// ... but forbid this ...
//int v1 { wrapValue(1) }; // call ambigious
int v2;
(void)v0;
(void)v2;
// ... and this ?
//v2 = wrapValue(2); // call ambigious
}
关于c++ - 如何禁止分配给不引用变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41076212/