C++ 如何有效地重载一个函数,而不会发疯?
所以我有这个函数(有80行):C++ 如何有效地重载一个函数,而不会发疯?,c++,overloading,C++,Overloading,所以我有这个函数(有80行): int listPlatformInfo(…,char*foo) { ... 对于(uint32_t a=0;a
int listPlatformInfo(…,char*foo)
{
...
对于(uint32_t a=0;a
我有20种不同的函数重载platformInfo()是否有一种方法可以重载此函数,其中唯一的更改是foo的数据类型,而无需使用模板复制整个函数20次
template<typename T>
int listPlatformInfo(..., T foo) // or T* ?
{
...
for (uint32_t a = 0; a < platformCount; a++)
{
platformInfo(platforms, info, foo);
}
return 0;
}
模板
int listPlatformInfo(…,T foo)//或T*?
{
...
对于(uint32_t a=0;a
这正是泛型存在的原因。见:
模板
void myGenericFunction(T参数)
{
非常感谢你救了我一天,也拯救了我的理智:啊,看到有人第一次发现模板真是太好了是的,你可以。从模板生成的类和任何其他类一样。只是编译器为我们生成了它,我们不必自己键入它。OP的问题没有提供足够的信息来证明这个sleDigE锤是最好的解决方案。我知道这有点离题,但我不能自已:80行的功能是很长的。如果可能的话,试着缩短它(把它分成更小的函数)。@ RWN“C++编程语言”Bjarne Stroustrup。为什么你有一个带有控制变量a
的for
循环,而你没有使用a
?你的问题是严重缺乏重要信息。@Lehu是对的。分成更小的函数,你一开始就不会有这个问题。也就是说,你有一个80行函数,其中一行使用e> foo
。将其他79放入另一个可以调用的函数中。无需复制!请不要编造“泛型”之类的术语对于C++,我们有模板。这不是C++。泛型是许多语言的更广泛的术语,包括java、Swift、Objic C和C.*。模板函数是C++术语。我把两者都包括,因为它对了解两者都有用,除非你计划不学习任何其他语言。
template<typename T>
int listPlatformInfo(..., T foo) // or T* ?
{
...
for (uint32_t a = 0; a < platformCount; a++)
{
platformInfo(platforms, info, foo);
}
return 0;
}
template<class T>
void myGenericFunction(T parameter)
{
cout << parameter << " is of type "<< typeid(parameter).name() << endl;
}
int main()
{
myGenericFunction<int>(1);
return 0;
}