是否允许并接受用删除标记静态方法
Is it allowed and accepted to mark a static method with delete?
为所有业务对象假设接口旨在隐藏实现。不使用PIMPL模式。
class CNetworkManager : public IMyNetwork {...};
所有这些经理都是单身人士,具有以下方法:
NetworkManager.h
CNetworkManager* CNetworkManager::getInstance();
CNetworkManager* CNetworkManager::destroy();
但是networkmanager.h并未导出。因此,在
中使用静态方法NetworkManagerFactory.h
class CMyNetworkFactory
{
public:
static IMyNetwork* getInstance();
static void destroy();
};
NetworkManagerFactory.cpp
IMyNetwork* CMyNetworkFactory::getInstance()
{
return CNetworkManager::getInstance();
}
但是所有工厂都应使用相同的命名。因此我添加了
模板isingletonFactory.h
template <class Factory, class Interface>
class CSingletonFactory
{
public:
~CSingletonFactory() {}
static Interface* getInstance() = delete;
static void destroy() = delete;
};
和重新设计的NetworkManagerFactory.h到CRTP
class CMyNetworkFactory : public CSingletonFactory<CMyNetworkFactory, IMyNetwork>
{
public:
static IMyNetwork* getInstance();
static void destroy();
};
问题:使用 static 与 delete 一起使用吗?
使用静态和删除不良的用法还是常见的艺术?
= delete;
是一个函数定义,严格地说。因此,任何函数都可以定义为已删除。该功能是成员或免费的,无论是否静态,与已删除的定义完全正交。
删除的结果是指指删除函数的程序变得不明显。转介由过载分辨率确定。
是的,如果我们想禁止某些内容,则删除定义是普遍的做法。您似乎希望防止在没有getInstance
的情况下定义诸如CMyNetworkFactory
之类的内容。但是,然后我承认,不知道为什么您需要定义任何通过CRTP删除的内容。毕竟,名称查找未能完全找到getInstance
与已删除的定义一样好。
相关文章:
- 尝试了解在导入的静态方法上使用删除方法时的错误
- 如何在C++中删除静态数组?
- 如何通过命名空间调用非静态方法
- 如何在没有实例的情况下获取非静态方法的类型?
- 调用从模板派生的类的静态方法,而不指定模板
- 如何在 c++ 中异步调用静态方法?
- C++ 将静态方法转换为简单方法
- 从另一个标头中的标头调用静态方法
- C++中静态方法的局部变量范围
- 如何启用使用另一个类的静态方法的模板函数的自动推导,从而消除冗长的调用方代码
- 使用本机 JNI 静态方法实现C++ Java 运行时错误
- 当只有静态方法受到影响时,如何解决C++中的链接器错误?
- 静态变量在同一个翻译单元中被静态方法使用时是否保证被初始化?
- 为什么链接器报告全局函数的乘法定义符号,而不是类静态方法
- 从部分专用模板方法调用模板非静态方法
- 如何使用 c++ 在 cocos2dx 中定义非静态方法
- 使用 CMake 的静态方法链接错误
- 在子类上调用模板化静态方法时获取类的类型名
- 仅具有公共静态方法的帮助程序类
- 是否允许并接受用删除标记静态方法