我正在为我的应用程序开发一个“文件系统”来处理文件操作,例如列出、创建、删除文件和目录以及获取文件数据。我想为此使用 std::fstream ,因为它比 C FILE Handler 更安全、更容易格式化。但是我无法从函数返回流对象(它没有副本 c'tor)并且当我尝试返回引用时我收到警告(我不是警告并不意味着那么多,但我正在尝试修复我的应用程序中所有可能的警告,直到现在我都做了):“警告:返回对临时的引用”。我能做什么?如果有人遇到这种情况并找到了更好的处理方法,请告诉。
编辑:
std::ofstream &Filesystem::createFile(const String &str) {
std::ofstream file(str);
return file;
}
Run Code Online (Sandbox Code Playgroud)
这就是我正在努力实现的目标。但由于警告,我正在寻找另一种方式。
提前致谢,
Gasim Gasimzada
我有一个功能对象typedef std::function<bool(Event*)> Handler.成员函数始终分配给此对象.所以,我正在用它std::bind来实现这一目标.
Handler f = std::bind(&LevelSystem::switchLevel, this, std::placeholders::_1);
f(new Event("test"));
Run Code Online (Sandbox Code Playgroud)
上面的代码按预期工作,但我想std::bind在一个帮助函数中包含更干净的代码.这就是我想出的.
template<class Func> inline Handler MemFn(Func &&f) {
return std::bind(f, this, std::placeholders::_1);
}
Run Code Online (Sandbox Code Playgroud)
用法将是:
Handler f = MemFn(&LevelSystem::switchLevel);
Run Code Online (Sandbox Code Playgroud)
使用此功能时出错:
No viable conversion from
'__bind<bool(LevelSystem::*&)(Event *), System *,std::__1::placeholders::__ph<1> &>' to
'Handler' (aka 'function<bool(Event *)>')
Run Code Online (Sandbox Code Playgroud)
我不明白这个错误.
我有一个模板类
template<typename TLoader, typename TCreator>
class ManagerGroup {
public:
uint32_t loadFromPath(const Path &path) {
return mLoader.load(path);
}
void createFile(uint32_t handle) {
return mCreator.create(handle);
}
private:
TLoader mLoader;
TCreator mCreator;
};
Run Code Online (Sandbox Code Playgroud)
对于loadFromPath和函数,如果提供的类型名称是;createFile我想禁用它们 std::nullptr_t所以,我可以做这样的事情:
ManagerGroup<FontLoader, std::nullptr_t> fontManager;
// No issues
fontManager.loadFromPath("/test");
// Compilation error
fontManager.createFile(10);
ManagerGroup<std::nullptr_t, MeshCreator> meshManager;
// NO issues
meshManager.createFile(20);
// Throws error
meshManager.loadFromFile("/test");
Run Code Online (Sandbox Code Playgroud)
SFINAE 可以做到这一点吗?
我尝试了以下方法,但无法使其正常工作(基于https://en.cppreference.com/w/cpp/types/enable_if中的示例#5 ):
template<typename = std::enable_if_t<!std::same<TCreator, std::nullptr_t>::value>>
void createFile(uint32_t handle) {
return mCreator.create(handle);
}
Run Code Online (Sandbox Code Playgroud) 我想创建一个触摸控件,我向左滑动,视图在分页模式下滚动(比如在照片应用中你在照片之间滑动)但是当前控制器中的视图没有进入,我想要一个新的控制器来用它自己的观点.我应该使用什么控件来构建类似的东西?