小编Gas*_*sim的帖子

如何返回标准文件流

我正在为我的应用程序开发一个“文件系统”来处理文件操作,例如列出、创建、删除文件和目录以及获取文件数据。我想为此使用 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

c++ g++ std

1
推荐指数
1
解决办法
2881
查看次数

如何在std :: bind周围创建包装器

我有一个功能对象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)

我不明白这个错误.

c++ function-pointers c++11

1
推荐指数
1
解决办法
949
查看次数

如何使用 SFINAE 根据模板类型禁用类内的函数

我有一个模板类

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)

c++ sfinae

1
推荐指数
1
解决办法
67
查看次数

当向左滑动时我需要用什么来改变控制器?

我想创建一个触摸控件,我向左滑动,视图在分页模式下滚动(比如在照片应用中你在照片之间滑动)但是当前控制器中的视图没有进入,我想要一个新的控制器来用它自己的观点.我应该使用什么控件来构建类似的东西?

uiviewcontroller ios segue

0
推荐指数
1
解决办法
57
查看次数

标签 统计

c++ ×3

c++11 ×1

function-pointers ×1

g++ ×1

ios ×1

segue ×1

sfinae ×1

std ×1

uiviewcontroller ×1