C++ 如何有效地重载一个函数,而不会发疯?

C++ 如何有效地重载一个函数,而不会发疯?,c++,overloading,C++,Overloading,所以我有这个函数(有80行): int listPlatformInfo(…,char*foo) { ... 对于(uint32_t a=0;a

所以我有这个函数(有80行):

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