【问题标题】:How can I add descriptive names to a templated class?如何向模板类添加描述性名称?
【发布时间】:2022-11-16 23:37:59
【问题描述】:

我创建了一类事件。

class DoorEvts
{
  private:
    std::function<int, int> EvtOpenFunc;    // onOpen(int floor, int building) ; 
    std::function<char*> EvtClosedFunc; // onClosed(char* Name) ;

  public:
    void SetEvtOpen(std::function<int, int> myEvtHandlingFunc)
    {
      EvtOpenFunc = myEvtHandlingFunc;
    };

    void SetEvtClosed(std::function<char*> myEvtHandlingFunc)
    {
      EvtClosedFunc = myEvtHandlingFunc;
    };

  };

我想让事件数据对任何愿意使用它的人来说都是显而易见的。

不仅使用类型,还使用描述。类似于函数的声明方式。

我尝试将信息添加为评论,以便用户了解每种类型的含义。

如果退出,寻找更好的代码内解决方案。

【问题讨论】:

  • EvtOpenEvtClosed 可能更具描述性,也许 EvtOpenFunctionEvtClosedFunction 或者只是 OpenFunctionClosedFunction 您也可以将 SetEvtOpen() 命名为 SetEvtOpenFunction()SetOpenFunction()
  • 不清楚,因为:“......我想让事件数据对任何愿意使用它的人来说都是显而易见的......”但是事件数据EvtOpenEvtClosedprivate所以只有这个类/你可以使用它。
  • 只有计算机科学中的难题。 1) 缓存失效,2) 命名事物,3) off-by-1 错误。
  • 据我所知,Delegate 不是标准的 C++ 东西。如果您使用标准构造并明确描述/包含非标准构造(包括它们的代码),它会使您的问题更容易回答

标签: c++


【解决方案1】:

我真的不明白你在问什么,但也许 using 是你在找什么?

class DoorEvts
{
  public:
    using OpenDelegate = Delagate<int, int>;
    using CloseDelegate = Delegate<char*>;
  private:
    OpenDelegate EvtOpenFunc; // onOpen(int floor, int building) ; 
    CloseDelegate EvtClosedFunc;  // onClosed(char* Name) ;

  public:
    void SetEvtOpen(OpenDelegate myEvtHandlingFunc)
    {
      EvtOpenFunc = myEvtHandlingFunc;
    };

    void SetEvtClosed(CloseDelegate myEvtHandlingFunc
    {
      EvtClosedFunc = myEvtHandlingFunc;
    };

};

此外,如果您使用一些文档工具,例如Doxygen,您可以编写可以转换为文档的cmets。

【讨论】:

  • 谢谢,但我希望以某种方式在代码中添加“floor”和“building”,例如:Delegate<int floor, in building> Func;
猜你喜欢
  • 1970-01-01
  • 2013-03-09
  • 2016-04-14
  • 1970-01-01
  • 2021-10-06
  • 1970-01-01
  • 1970-01-01
  • 2022-08-23
  • 1970-01-01
相关资源
最近更新 更多