boost::variant 引用有界类型,无法赋值

boost::variant with reference bounded type, not able to assign a value

我有一个 boost::variant: B 是一个不完整的类型所以我有两种可能来声明我的变体

typedef boost::variant<B*, char, int> vari; // this works
typedef boost::variant<B&, char, int> vari; // this works also

但现在我有以下函数,我在其中尝试为我的变体赋值:

void setVari(vari& v, const int n){
    swich(n) {
    case 1 :
        vari = 100;
        break;
    case 2 :
        vari = 'a'
        break;
    case 3 : {
        B elem;
        vari = elem;  // or "vari = *elem" if i use the pointer variant
        break;
        }
    case default :
        break;
    }
}

此功能仅在我使用第一种方法声明我的变体时有效。

如果我使用参考内容,编译器会报 template argument deduction/substituiion failed 错误。

当使用引用而不是指针时,是否有可能使该函数起作用?

变体可以包含引用,但这使得它们不可分配。

docs:

  • Assignable:variant本身是Assignable当且仅当它的每一个有界类型都满足概念的要求。 (请注意,顶级 const 限定类型和引用类型不满足这些要求。)
  • MoveAssignable:当且仅当它的每一个有界类型都满足概念的要求时,variant 本身就是 MoveAssignable。 (请注意,顶级 const 限定类型和引用类型不满足这些要求。)

您仍然可以用它们做一些有用的事情(例如,return它们)。参见例如: