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它们)。参见例如:
我有一个 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它们)。参见例如: