代码之家  ›  专栏  ›  技术社区  ›  isa

C++函数动态数据类型定义

  •  2
  • isa  · 技术社区  · 15 年前

    在C++中,当定义一个函数时,必须定义该变量的数据类型:

    void makeProccess(int request)
    

    但是,我希望实现一个采用不同数据类型的函数,而不是采用静态定义的整数类型。

    void makeProccess(anyType request)
    

    我怎样才能设计出这样的过程呢,有什么想法吗?

    谢谢。

    4 回复  |  直到 15 年前
        1
  •  3
  •   Stephen    15 年前

    使用模板:

    template <typename T>
    void makeProcess(T request) {
      // request is of type "T", which can vary
      cout << "request: " << request;
    }
    

    另一个好处是,您可以将其专门化:

    template <>
    void makeProcess(string request) {
      cout << "This is special handling for a string request: " << request;
    }
    
        2
  •  1
  •   Tejs    15 年前

    你会想查找C++模板——这是一个很好的链接: http://www.cplusplus.com/doc/tutorial/templates/

        3
  •  1
  •   Luzik    15 年前

    你考虑过用卫生棉条吗?

    template <class T> void makeProcess(T request)
    {
        // code
    }
    
        4
  •  0
  •   Doug    15 年前

    首先,“使用模板”的答案非常有用——你应该研究模板——这是另一种替代方法。

    如果函数正在将值传递给其他一些最终知道“内部”是什么类型的代码,那么也可以使用boost::any-请参见 http://www.boost.org/doc/libs/1_42_0/doc/html/any.html . 不过,这可能有点危险,因为您可以很容易地获得以不明显的方式耦合/相互依赖的代码,并且在运行时崩溃,而不是未能编译(这就是模板将要发生的情况)。然而,对于非专家C++程序员来说,它比大量模板代码更容易理解。

    (请注意,boost::any还要求类型是可复制和可分配的。)