gpt4 book ai didi

c++ - 模板特化或函数重载

转载 作者:行者123 更新时间:2023-11-28 07:38:26 26 4
gpt4 key购买 nike

我知道还有其他类似的问题,但不是很清楚。

现在我觉得这是一个愚蠢的问题,因为我确定我已经有了答案,但还是让我问吧。

所以我基本上有一个函数,它接受一个字符串,然后根据适当的变量类型将它转换成这样:

template<class T>
void ConvertValue(std::string str, T &variable)
{
variable = static_cast<T>(str);
}

所以这似乎没问题吧?但问题是你不能将字符串转换为 int 或 float,因此我必须对 int 和 float 以及其他类型进行模板专门化,它不能转换为所以我要问的是我应该有像这样:

void ConvertValue(std::string str, int &variable) { variable = atoi(str.c_str()); }
void ConvertValue(std::string str, float &variable) { ... }
void ConvertValue(std::string str, double &variable) { ... }
void ConvertValue(std::string str, std::vector<int> &variable) { ... }

..等等

或者我应该使用模板特化?哪一个更有意义?我倾向于函数重载,因为大多数类型都会有自己的转换函数,所以由于它们略有不同,函数重载对我来说是合乎逻辑的,但我不知道我是否遗漏了什么。

我应该坚持使用函数重载吗?或者切换到模板特化?

最佳答案

如果函数的内部结构必须针对每种类型而不同,并且可能包括类型检查,那么只有多个函数会更简单、更清晰。

另一方面,如果您有一堆带有用于转换的 toString() 方法的类。然后你会使用一个模板,因为内部结构总是一样的。

关于c++ - 模板特化或函数重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16310281/

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