我正在使用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-连接器++源代码,似乎无法识别相关部分。
注:上述错误是使用CMake和-std=c++14生成的。
发布于 2017-01-24 21:52:38
库如何使用嵌套类和指向此类的指针来实现这种类型的行为?
抽象类的具体实例仅作为基类子对象存在。这样做的方法是继承:
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 (命名空间?)的成员这一事实在其他方面对用户没有意义,但影响名称查找的方式除外。
发布于 2017-01-24 22:00:54
事实上,当你宣布
sql::Driver *driver__;
sql::Connection *connection__;声明对实现以下接口的实例的引用:
为了实例化这些实例,库以这种方式向您提供工厂。
driver__ = get_driver_instance();
connection__ = driver->connect("tcp://127.0.0.1:3306", "root", "root");一旦实例化,您将只操作这些实例的公共接口。
https://stackoverflow.com/questions/41839281
复制相似问题