将boost :: variant聚合的类型的对象传递给接受boost :: variant的函数
假设我有:
class TypeA { };
class TypeB { };
typedef boost::variant<TypeA, TypeB> Type;
还行吧:
void foo(Type t) { };
int main(){
TypeA a;
foo(a);
}
这不编译:
void foo(Type &t) { };
int main(){
TypeA a;
foo(a);
}
有错误:
无效初始化类型'Type&amp;'的引用
'TypeA'类型的表达
这也不编译:
void foo(Type *t) { };
int main(){
TypeA a;
foo(&a);
}
有错误:
不能将'TypeA *'转换为'Type *'以将参数'1'转换为'void
FOO(类型*)”
有没有办法传递给一个接受boost :: variant的函数的函数,该函数由boost :: variant聚合的一个类型的实例,通过引用(如情况2)或指针(如情况3) ?
非常感谢你!
没有找到相关结果
已邀请:
2 个回复
感秆暴壳
在2或3中不可能发生的事情:
你有两个解决方案(对于非模板foo): 转换为
,然后获取指针/引用 创建一个
进行隐式转换 第三种解决方案是改变foo本身,并使其成为模板。这取决于你想做什么。
梆晨灸碾
包含
和
。它没有。它包含
或
。它更像是一个联合而不是一个结构。 您可以按值传递
,因为存在从
到ѭ6implicit的隐式转换。 从
到
(或
到
)没有隐式转换,也不应该。想想如果对
对象的引用被传递到
会发生什么,并且
决定用
值替换它。 不知道
和
/
是什么,我不能给你更具体的建议,但也许你可以使用功能模板。即
或重载函数: