gpt4 book ai didi

c++ - 不能重载函数

转载 作者:太空狗 更新时间:2023-10-29 19:46:30 30 4
gpt4 key购买 nike

所以我有一个模板化类,我想在我有特定类型(比如 char)时重载函数的行为。对于所有其他类型,让他们做自己的事。但是,c++ 不允许我重载该函数。

为什么我不能重载这个函数?我真的真的不想做模板特化,因为那样我就复制了整个类。

这是一个演示问题的玩具示例:http://codepad.org/eTgLG932

为了您的阅读乐趣,将相同的代码张贴在这里:

#include <iostream>
#include <cstdlib>
#include <string>

struct Bar
{
std::string blah() { return "blah"; }
};

template <typename T>
struct Foo
{
public:
std::string doX()
{
return m_getY(my_t);
}

private:
std::string m_getY(char* p_msg)
{
return std::string(p_msg);
}

std::string m_getY(T* p_msg)
{
return p_msg->blah();
}

T my_t;
};

int main(int, char**)
{
Foo<char> x;
Foo<Bar> y;
std::cout << "x " << x.doX() << std::endl;
return EXIT_SUCCESS;
}

谢谢大家的建议。提出了两个有效的解决方案。我可以专门化 doX 方法,或专门化 m_ge​​tY() 方法。

归根结底,我更愿意将我的专业保密而不是公开,所以我接受 Krill 的回答。

最佳答案

您可以只对特定类型的整个模板类中的一个函数进行特化,而无需对整个类进行特化。它看起来像这样:

template <> void Foo<char>::doX() {
/* custom implementation here */
}

您在实践中很少看到这种情况,但这是完全合法的 C++ 代码。

希望这对您有所帮助!

关于c++ - 不能重载函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11268535/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com