如何为不可创建类创建包装器
How to create a wrapper for non-creatable class?
我正在使用特定的类库。所有可用的值类都是从基类派生的。有标量类型
oaBooleanValue : public oaValue
oaIntValue : public oaValue
oaFltValue : public oaValue
oaStringValue : public oaValue
前3个类定义方法get()作为返回值。第四个类将get定义为获取引用。
oaBoolean get() const;
oaInt get() const;
oaFloat get() const;
void get(oaString& value) const;
我需要在我的模板包装器类中统一使用所有4个类。我已经编写了辅助oaStringValueGetter类,如下所示。但问题是存在的。基类ovalue限制了默认构造函数和复制构造函数。只有一种方法可以创建实例,即使用静态的'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);
};
我想你混淆了包装器和子类的概念。
包装器不一定是被包含类的子类,它可以由被包含类的实例组成,其中对组合类的调用被委托给被组合类,而不是直接继承。
在您的情况下,让包装器包含包装类的实例,然后委托调用可能更容易。
尝试创建一个模板函数,通过返回对象的get()方法的结果来从类型为T的对象获取值。它将是标量的默认实现。然后对这个模板进行专门化,其中使用T=oaString和临时oaString变量来获取接口所需的字符串值。返回该变量作为结果。希望对大家有所帮助
相关文章:
- 创建包装升压适配器的自定义范围类
- 如何为 v8::P ersistent<v8::Function> 创建到 c++ 函数的包装器
- 包装器是从 strcat_s() 到 strcat() 吗?如果没有,是否可以创建一个?
- 如何为要在 C# 中使用的静态库创建 C++ 或 C++/CLI 包装器
- 如何创建独立于平台的宏来包装编译器扩展?
- 在 C++ 中为 C 样式对象创建一个透明包装类
- 创建一个允许轻松创建虚拟函数包装器函数的C++宏
- 为 std::bind 创建模板包装器
- 在 boost::d eadline_timer 上创建包装器,无法将参数传递给处理程序函数
- 创建包装了可变类型的元组
- C++ - 错误:为 OpenCV 的 cv::标量::all 创建 C 包装器时出现预期的类型说明符
- 如何在Swig中为非基元数据类型创建包装器
- 通过围绕C++接口创建C包装器,在FORTRAN中调用C++dll文件
- 为库创建 C 包装器C++
- 为非托管程序集动态创建包装
- 为具有大量依赖关系的库创建包装器的正确方法
- 如何为不可创建类创建包装器
- 如何为 c++ 函数创建 c# 包装器
- 如何在 printf 上创建包装器
- 如何在vc++中为软件创建c#包装器