2010-05-01 92 views
2

在C++中,当你定义一个函数,它接受一个参数,你必须定义变量的数据类型:C++函数的动态数据类型定义

void makeProccess(int request) 

不过,我想实现一个函数,它接受不同的数据类型,而不是静态定义的整数类型。

void makeProccess(anyType request) 

我该如何设计一个这样的过程,任何想法?

谢谢。

回答

3

使用模板:

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; 
} 
1

拥有你考虑使用tamplates是什么?

template <class T> void makeProcess(T request) 
{ 
    // code 
} 
0

首先, “使用模板” 答案是非常有用的 - 你应该调查模板 - 这是另一种选择。

如果函数将值传递给最终确切知道“内部”类型的其他代码,则还可以使用boost :: any - 请参阅http://www.boost.org/doc/libs/1_42_0/doc/html/any.html。然而,这可能有点危险,因为你可以很容易地获得以不明显的方式耦合/相互依赖的代码,并且在运行时崩溃而不是无法编译(这是模板会发生的情况)。但是,对于非专业C++编码人员而言,它可能比大量的模板编码更容易理解。

(请注意,boost :: any也需要该类型是可复制和可赋值的。)