首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套类指针的特殊行为?

嵌套类指针的特殊行为?
EN

Stack Overflow用户
提问于 2017-01-24 21:27:17
回答 2查看 49关注 0票数 0

我正在使用mysql-conntector++,并且对指针类型的一些行为感兴趣,如:

代码语言:javascript
复制
sql::Driver *driver__; 

代码语言:javascript
复制
sql::Connection *connection__;

显然,当我尝试初始化堆上的这些指针时,::Driver::Connectionsql的嵌套类:

代码语言:javascript
复制
sql::Driver *driver__ {new sql::Driver()};

错误:

代码语言:javascript
复制
error: invalid new-expression of abstract class type ‘sql::Driver’
    sql::Driver *driver__ {new sql::Driver()};

库如何使用嵌套类和指向此类的指针来实现这种类型的行为?

我查看了mysql-连接器++源代码,似乎无法识别相关部分。

注:上述错误是使用CMake和-std=c++14生成的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-24 21:52:38

库如何使用嵌套类和指向此类的指针来实现这种类型的行为?

抽象类的具体实例仅作为基类子对象存在。这样做的方法是继承:

代码语言:javascript
复制
struct MyDriver : sql::Driver {
    //TODO implement all pure virtual functions of sql::Driver
}

// imaginary implementation
Driver* get_driver_instance() {
    static MyDriver instance;
    return &instance;
}

PS。Driversql (命名空间?)的成员这一事实在其他方面对用户没有意义,但影响名称查找的方式除外。

票数 3
EN

Stack Overflow用户

发布于 2017-01-24 22:00:54

事实上,当你宣布

代码语言:javascript
复制
sql::Driver *driver__;
sql::Connection *connection__;

声明对实现以下接口的实例的引用:

  • SQL驱动程序
  • SQL连接

为了实例化这些实例,库以这种方式向您提供工厂。

代码语言:javascript
复制
driver__ = get_driver_instance();
connection__ = driver->connect("tcp://127.0.0.1:3306", "root", "root");

一旦实例化,您将只操作这些实例的公共接口。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41839281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档