当前位置: 首页 > 知识库问答 >
问题:

C 17如何保存一个通用的可调用文件供以后使用

公孙森
2023-03-14

我想保存一个带有状态的泛型可调用,以备以后使用。请参阅下面的示例代码。我可能可以使用std::functionstd::bind来实现这一点,但我不知道什么是最好的。还请注意,在下面示例的main()中,capuredInt必须保存在可调用的状态。

有哪些可能性:

  • makeCallable(有趣,args…){ ... }
  • CallableType
template <typename RetT>
class Service
{
public:

   template <typename Fn, typename... Args>
   Service(Fn&& fun, Args&&... args)
   {
      m_callable = makeCallable(fun, args...);
   }

   Run()
   {
      m_callable();
   }

   CallableType<RetT> m_callable;
};

// Template deduction guides (C++17)
template <typename Fn, typename... Args>
Service(Fn&& fun, Args&&... args) -> Service<std::invoke_result_t<std::decay_t<Fn>, std::decay_t<Args>...>>;

int main()
{
   Service* s = nullptr;
   {
      int capturedInt = 5;
      s = new Service([capturedInt]() { std::cout << capturedInt << std::endl; } );
   }
   
   s->Run();
}


共有2个答案

方祺
2023-03-14

给定设置,m_callable的唯一选项将是std::function。由于仿函数的类型是构造函数本身的参数,您必须键入-擦除仿函数以保存它以备将来使用-并且std::function只是一种机制。

因此,m_callable将是:

std::function<retT ()> m_callable;

你会把它设置成这样:

m_callable = [=]() { return fun(args...); }
岳泉
2023-03-14

我还将使用std::function,但将其作为类的接口,如下所示:

template <typename RetT>
class Service
{
public:

   Service(std::function<RetT()> fun)
   {
      m_callable = std::move(fun);
   }

   Run()
   {
      m_callable();
   }
private:
   std::function<RetT()> m_callable;
};

然后,您明确了为类存储可调用项的选项。然后,用户可以决定如何将其参数绑定到可调用对象本身,使用std::函数可以灵活地进行绑定。

s = new Service([capturedInt]() { std::cout << capturedInt << std::endl; } );
s->Run();

struct Foo
{
    void MyPrint(int capturedInt) { std::cout << capturedInt << std::endl; }
};
Foo foo;
int capturedInt = 5;
s = new Service(std::bind(&Foo::MyPrint, &foo, capturedInt);
s->Run();

...那么你就不用担心上课造成的生活时间问题了。

 类似资料:
  • 问题内容: 我实质上是试图浏览html文件的文件夹。我想将它们嵌入到二进制文件中,并能够根据请求解析它们以用于模板执行目的。(如果我的措词不正确,请原谅)。 任何想法,技巧,窍门或实现此目的的更好方法将不胜感激。 问题答案: 我使用大多数Go Web应用程序执行此操作。我使用go-bindata从要嵌入的所有文件中自动生成Go源代码,然后将其编译为二进制文件。所有这些都是在构建过程中自动完成的。

  • 给定此方法: 忽略变量名,该方法所做的是将加密代码的数据写入名为EncryptedMessage的项目文件夹内生成的txt文件中。txt。 我需要的是一种方法来保存txt文件,而不是在项目文件夹中,保存在用户在运行期间指定的位置(打开另存为对话框)。我认为这可以由JFilechooser完成,但我无法让它工作。

  • 问题内容: 我正在将DHTMLX网格导出到csv,并且已经能够成功创建.CSV文件。我遇到的问题是它没有提示用户保存/打开文件。我正在使用来自javascript的$ .post调用将CSV字符串发送到PHP,然后将该字符串写入csv。由于某种原因,它没有为用户创建提示,但它已成功写入文件并保存在服务器上。下面是相关代码: JS: PHP(export.php): 这段代码可以完全按照我的需要导出

  • 我想创建一个和稍后在其上的推送元素,如: 推荐的方法是什么? 谢谢!

  • 以上内容将注销,此: 我只是想知道我是否可以替换mysite。本地主机。具有文件夹路径的com。我甚至尝试用文件夹的完整路径替换URL,但是只能在上工作。是否有将文件保存到文件夹的功能?

  • 我有一个powershell脚本,我用这种方式保存日志 在Python中如何使用它?