我使用的是mysql-conntector ++,我对指针类型的一些行为感兴趣,例如:
sql::Driver *driver__;
或
sql::Connection *connection__;
当我尝试在堆上初始化这些指针中的任何一个时,显然::Driver
和::Connection
是sql
的嵌套类:
sql::Driver *driver__ {new sql::Driver()};
错误:
error: invalid new-expression of abstract class type ‘sql::Driver’
sql::Driver *driver__ {new sql::Driver()};
库如何使用嵌套类和指向此类的指针实现此类行为?
我查看了mysql-connector ++源代码,似乎无法识别相关部分。
N.B使用带有-std=c++14
答案 0 :(得分:3)
库如何使用嵌套类和指向此类的指针实现此类行为?
抽象类的具体实例仅作为基类子对象存在。制作它们的方法是继承:
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。 Driver
是sql
(名称空间?)的成员这一事实对用户来说并不重要,除了它影响名称查找的方式。
答案 1 :(得分:0)
事实上,当你宣布
时sql::Driver *driver__;
sql::Connection *connection__;
您声明对实现以下接口的实例的引用:
为了实现此类实例,库以这种方式为您提供工厂
driver__ = get_driver_instance();
connection__ = driver->connect("tcp://127.0.0.1:3306", "root", "root");
一旦实例化,您将只操纵此类实例的公共接口。