【发布时间】:2015-04-13 07:13:20
【问题描述】:
我的问题如下:
我需要创建一个支持以下代码的A类:
class B{
//some composed type
}
A a;
a.setValue(1);
a.setValue(2.2);
a.setValue('c');
a.setValue(B());
关键是我需要一个实例来保存设置的值,并且只有它。这意味着我需要一个包含数据的变量,或者指向数据的变量,但 A 不知道该类型,将来可能会添加更多类型(例如 B)。
重载并不能解决这个问题,因为如果类型是 int 而不是 double,值将保存在哪里?
模板不能解决这个问题,因为对a.setValue(...) 的调用必须与上述完全一样,没有模板需要的“”字符。
我还通过定义尝试了隐式强制:
class MyObj{
MyObj* theObj;
MyObj(){}
virtual ~MyObj() = 0;//with later empty implementation
setValue(myObj* newVal){theObj = newVal;}
}
class MyInt:MyObj{
myInt(){}
myInt(int theInt){}//for implicit cast from int
}
a.setValue(1);
这会失败,因为编译器可以自动将 int 转换为 myInt,但 setValue 需要 myObj,所以即使强制可以工作,编译器也不会自动进行推导。
我该如何解决这个问题?
谢谢。
【问题讨论】:
-
把boost::any扔出去。
-
JUCE 中的
var类也可以工作juce.com/api/classvar.html
标签: c++ type-conversion