我正在使用特定的类库。所有可用的值类都派生自基类。有标量类型
oaBooleanValue : public oaValue
oaIntValue : public oaValue
oaFltValue : public oaValue
oaStringValue : public oaValue
前3个类将方法get()定义为返回值。并且第4类将get定义为参考。
oaBoolean get() const;
oaInt get() const;
oaFloat get() const;
void get(oaString& value) const;
我需要在我的模板包装器类中统一使用所有4个类。 我已经编写了辅助oaStringValueGetter类,如下所示。但是有问题。基类oaValue限制默认构造函数和复制构造函数。只有一种方法可以使用静态'create()'方法创建实例。
有没有办法在我的类中添加一些类型转换方法,以便自动转换为oaStringValue?
class oaStringValueGetter : public oaStringValue
{
public:
oaString get() const
{
oaString str;
oaStringValue::get(str);
return str;
}
};
这里是从库中获取的部分类定义,用于参考
class oaObject {
public:
// public methods are here
protected:
~oaObject();
private:
oaObject();
oaObject(const oaObject& obj);
oaObject& operator=(const oaObject& obj);
};
class oaValue : public oaObject {
public:
void destroy();
oaBoolean isEqual(oaValue *value) const;
oaValue *copy() const;
};
class oaString; // library-defined custom string class
class oaStringValue : public oaValue {
public:
static oaStringValue* create(oaObject* database, const oaString &value);
void get(oaString& value) const;
void set(const oaString& value);
};
typedef int oaInt4;
class oaIntValue : public oaValue {
public:
static oaIntValue* create(oaObject* database, oaInt4 value);
oaInt4 get() const;
void set(oaInt4 value);
};
答案 0 :(得分:2)
我认为你混淆了包装器与子类的概念。
包装器不一定是包含类的子类,它可以由包含类的实例组成,其中对组合类的调用被委托给组合类而不是直接继承。 / p>
在你的情况下,让包装器包含被包装类的实例,然后委托调用可能会更容易。
答案 1 :(得分:1)
尝试创建一个模板函数,通过返回object的get()方法的结果来获取T类对象的值。它将是标量的默认实现。然后对该模板进行专门化,其中T = oaString和临时oaString变量用于获取接口所需的字符串值。结果返回该变量。希望能帮助你